⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maincanvas.java

📁 < J2ME手机游戏开发技术详解>>上的全部源码,包括实现中需要的相关图片
💻 JAVA
字号:
package exmenu;

/**
 * <p>Title: ExMenu</p>
 *
 * <p>Description: lizhenpeng</p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: LP&P</p>
 *
 * @author lipeng
 * @version 1.0
 */
import javax.microedition.lcdui.*;
class MainCanvas
  extends Canvas implements Runnable
{
  private int width;
  private int height;
  private long startTime;
  private long endTime;
  private static final int FRAME_TIME=80;
  private volatile Thread mainThread=null;
  public int whichActive;
  public int allAction;
  private Image image;
  private boolean isVolOn;
  private Font font=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_BOLD,
                                 Font.SIZE_LARGE);
  public MainCanvas()
  {
    this.width=this.getWidth();
    this.height=this.getHeight();
    start();
    whichActive = 0;
    try
    {
      image=Image.createImage("/bg.png");
    }
    catch(Exception e)
    {
      System.out.println(e);
    }
  }
  public void paint(Graphics g)
  {
    drawMenuScreen(g);
  }
  public void drawMenuScreen(Graphics g)
  {
    int menuOffset=(height-font.getHeight()*3)/2;
    g.setFont(font);
    g.setClip(0,0,width,height);
    g.drawImage(image,0,0,g.LEFT|g.TOP);
    int item0Color=0;
    int item1Color=0;
    int item2Color=0;
    switch(whichActive)
    {
      case 0:
        item0Color=255<<16;
        break;
      case 1:
        item1Color=255<<16;
        break;
      case 2:
        item2Color=255<<16;
      break;
    }
    g.setColor(item0Color);
    g.drawString("新游戏",(width-font.stringWidth("新游戏"))/2,
                 menuOffset+font.getHeight()*0,g.LEFT|g.TOP);
    g.setColor(item1Color);
    g.drawString("载入进度",(width-font.stringWidth("载入进度"))/2,
                 menuOffset+font.getHeight()*1,g.LEFT|g.TOP);
    g.setColor(item2Color);
    if(isVolOn)
    {
      g.drawString("声音开",(width-font.stringWidth("声音开"))/2,
                   menuOffset+font.getHeight()*2,g.LEFT|g.TOP);
    } else
    {
      g.drawString("声音关",(width-font.stringWidth("声音关"))/2,
                   menuOffset+font.getHeight()*2,g.LEFT|g.TOP);
    }
  }
  public void start()
  {
    mainThread=new Thread(this);
    mainThread.start();
  }
  public void run()
  {
    try
    {
      Thread currentThread=Thread.currentThread();
      while(currentThread==mainThread)
      {
        startTime=System.currentTimeMillis();
        action();
        repaint(0,0,width,height);
        serviceRepaints();
        endTime=System.currentTimeMillis();
        if((endTime-startTime)<FRAME_TIME)
        {
          Thread.sleep(FRAME_TIME-(endTime-startTime));
        }
      }
    } catch(InterruptedException ie)
    {
      System.out.println(ie.toString());
    }
  }
  protected void keyPressed(int keyCode)
  {
    judgeKeyCode(keyCode,getGameAction(keyCode));
  }
  protected void keyReleased(int keyCode)
  {
    freeKey(keyCode,getGameAction(keyCode));
  }
  public void judgeKeyCode(int keyCode,int GameKeyCode)
  {
    switch(GameKeyCode)
    {
      case Canvas.FIRE:
        if(((allAction&LPKeyMask.MASK_KEY_OK)==0)
           &&((allAction&LPKeyMask.MASK_KEY_OK_FLAG)==0))
        {
          allAction|=LPKeyMask.MASK_KEY_OK|LPKeyMask.MASK_KEY_OK_FLAG;
        }
        break;
      case Canvas.UP:
        if(((allAction&LPKeyMask.MASK_KEY_UP)==0)
           &&((allAction&LPKeyMask.MASK_KEY_UP_FLAG)==0))
        {
          allAction|=LPKeyMask.MASK_KEY_UP|LPKeyMask.MASK_KEY_UP_FLAG;
        }
        break;
      case Canvas.DOWN:
        if(((allAction&LPKeyMask.MASK_KEY_DOWN)==0)
           &&((allAction&LPKeyMask.MASK_KEY_DOWN_FLAG)==0))
        {
          allAction|=LPKeyMask.MASK_KEY_DOWN|LPKeyMask.MASK_KEY_DOWN_FLAG;
        }
        break;
      case Canvas.LEFT:
        if(((allAction&LPKeyMask.MASK_KEY_LEFT)==0)
           &&((allAction&LPKeyMask.MASK_KEY_LEFT_FLAG)==0))
        {
          allAction|=LPKeyMask.MASK_KEY_LEFT|LPKeyMask.MASK_KEY_LEFT_FLAG;
        }
        break;
      case Canvas.RIGHT:
        if(((allAction&LPKeyMask.MASK_KEY_RIGHT)==0)
           &&((allAction&LPKeyMask.MASK_KEY_RIGHT_FLAG)==0))
        {
          allAction|=LPKeyMask.MASK_KEY_RIGHT|LPKeyMask.MASK_KEY_RIGHT_FLAG;
        }
        break;
      default:
        switch(keyCode)
        {
          case Canvas.KEY_NUM2: //up
            if(((allAction&LPKeyMask.MASK_KEY_UP)==0)
               &&((allAction&LPKeyMask.MASK_KEY_UP_FLAG)==0))
            {
              allAction|=LPKeyMask.MASK_KEY_UP|LPKeyMask.MASK_KEY_UP_FLAG;
            }
            break;
          case Canvas.KEY_NUM8: //down
            if(((allAction&LPKeyMask.MASK_KEY_DOWN)==0)
               &&((allAction&LPKeyMask.MASK_KEY_DOWN_FLAG)==0))
            {
              allAction|=LPKeyMask.MASK_KEY_DOWN|LPKeyMask.MASK_KEY_DOWN_FLAG;
            }

            break;
          case Canvas.KEY_NUM4: //left
            if(((allAction&LPKeyMask.MASK_KEY_LEFT)==0)
               &&((allAction&LPKeyMask.MASK_KEY_LEFT_FLAG)==0))
            {
              allAction|=LPKeyMask.MASK_KEY_LEFT|LPKeyMask.MASK_KEY_LEFT_FLAG;
            }

            break;
          case Canvas.KEY_NUM6: //right
            if(((allAction&LPKeyMask.MASK_KEY_RIGHT)==0)
               &&((allAction&LPKeyMask.MASK_KEY_RIGHT_FLAG)==0))
            {
              allAction|=LPKeyMask.MASK_KEY_RIGHT|LPKeyMask.MASK_KEY_RIGHT_FLAG;
            }
            break;
          case Canvas.KEY_NUM5: //ok
            if(((allAction&LPKeyMask.MASK_KEY_OK)==0)
               &&((allAction&LPKeyMask.MASK_KEY_OK_FLAG)==0))
            {
              allAction|=LPKeyMask.MASK_KEY_OK|LPKeyMask.MASK_KEY_OK_FLAG;
            }
          break;
        }
      break;
    }
  }
  public void freeKey(int keyCode,int gameKeyCode)
  {
    switch(gameKeyCode)
    {
      case Canvas.FIRE:
        allAction&=~LPKeyMask.MASK_KEY_OK;
        break;
      case Canvas.UP:
        allAction&=~LPKeyMask.MASK_KEY_UP;
        break;
      case Canvas.DOWN:
        allAction&=~LPKeyMask.MASK_KEY_DOWN;
        break;
      case Canvas.LEFT:
        allAction&=~LPKeyMask.MASK_KEY_LEFT;
        break;
      case Canvas.RIGHT:
        allAction&=~LPKeyMask.MASK_KEY_RIGHT;
        break;
      default:
        switch(keyCode)
        {
          case Canvas.KEY_NUM2: //up
            allAction&=~LPKeyMask.MASK_KEY_UP;
            break;
          case Canvas.KEY_NUM8: //down
            allAction&=~LPKeyMask.MASK_KEY_DOWN;
            break;
          case Canvas.KEY_NUM4: //left
            allAction&=~LPKeyMask.MASK_KEY_LEFT;
            break;
          case Canvas.KEY_NUM6: //right
            allAction&=~LPKeyMask.MASK_KEY_RIGHT;
            break;
          case Canvas.KEY_NUM5:
            allAction&=~LPKeyMask.MASK_KEY_OK;
          break;
        }
      break;
    }
  }
  public void action()
  {
    if((allAction&LPKeyMask.MASK_KEY_UP_FLAG)!=0)
    {
      allAction&=~LPKeyMask.MASK_KEY_UP_FLAG;
      if(whichActive!=0)
      {
        --whichActive;
      } else
      {
        whichActive=2;
      }
    } else if((allAction&LPKeyMask.MASK_KEY_DOWN_FLAG)!=0)
    {
      allAction&=~LPKeyMask.MASK_KEY_DOWN_FLAG;
      if(whichActive!=2)
      {
        ++whichActive;
      } else
      {
        whichActive=0;
      }
    } else if((allAction&LPKeyMask.MASK_KEY_OK_FLAG)!=0)
    {
      allAction&=~LPKeyMask.MASK_KEY_OK_FLAG;
      switch(whichActive)
      {
        case 0:
          break;
        case 1:
          break;
        case 2:
          isVolOn=!isVolOn;
        break;
      }
    }
  }
}
class LPKeyMask
{
  public static final int MASK_KEY_LEFT=0x0001;
  public static final int MASK_KEY_LEFT_FLAG=0x0100;
  public static final int MASK_KEY_RIGHT=0x0002;
  public static final int MASK_KEY_RIGHT_FLAG=0x0200;
  public static final int MASK_KEY_UP=0x0004;
  public static final int MASK_KEY_UP_FLAG=0x0400;
  public static final int MASK_KEY_DOWN=0x0008;
  public static final int MASK_KEY_DOWN_FLAG=0x0800;
  public static final int MASK_KEY_OK=0x0010;
  public static final int MASK_KEY_OK_FLAG=0x1000;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -