MainCanvas.java
上传用户:gyyuli
上传日期:2013-07-09
资源大小:3050k
文件大小:8k
源码类别:

J2ME

开发平台:

Java

  1. package exmenu;
  2. /**
  3.  * <p>Title: ExMenu</p>
  4.  *
  5.  * <p>Description: lizhenpeng</p>
  6.  *
  7.  * <p>Copyright: Copyright (c) 2005</p>
  8.  *
  9.  * <p>Company: LP&P</p>
  10.  *
  11.  * @author lipeng
  12.  * @version 1.0
  13.  */
  14. import javax.microedition.lcdui.*;
  15. class MainCanvas
  16.   extends Canvas implements Runnable
  17. {
  18.   private int width;
  19.   private int height;
  20.   private long startTime;
  21.   private long endTime;
  22.   private static final int FRAME_TIME=80;
  23.   private volatile Thread mainThread=null;
  24.   public int whichActive;
  25.   public int allAction;
  26.   private Image image;
  27.   private boolean isVolOn;
  28.   private Font font=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_BOLD,
  29.                                  Font.SIZE_LARGE);
  30.   public MainCanvas()
  31.   {
  32.     this.width=this.getWidth();
  33.     this.height=this.getHeight();
  34.     start();
  35.     whichActive = 0;
  36.     try
  37.     {
  38.       image=Image.createImage("/bg.png");
  39.     }
  40.     catch(Exception e)
  41.     {
  42.       System.out.println(e);
  43.     }
  44.   }
  45.   public void paint(Graphics g)
  46.   {
  47.     drawMenuScreen(g);
  48.   }
  49.   public void drawMenuScreen(Graphics g)
  50.   {
  51.     int menuOffset=(height-font.getHeight()*3)/2;
  52.     g.setFont(font);
  53.     g.setClip(0,0,width,height);
  54.     g.drawImage(image,0,0,g.LEFT|g.TOP);
  55.     int item0Color=0;
  56.     int item1Color=0;
  57.     int item2Color=0;
  58.     switch(whichActive)
  59.     {
  60.       case 0:
  61.         item0Color=255<<16;
  62.         break;
  63.       case 1:
  64.         item1Color=255<<16;
  65.         break;
  66.       case 2:
  67.         item2Color=255<<16;
  68.       break;
  69.     }
  70.     g.setColor(item0Color);
  71.     g.drawString("新游戏",(width-font.stringWidth("新游戏"))/2,
  72.                  menuOffset+font.getHeight()*0,g.LEFT|g.TOP);
  73.     g.setColor(item1Color);
  74.     g.drawString("载入进度",(width-font.stringWidth("载入进度"))/2,
  75.                  menuOffset+font.getHeight()*1,g.LEFT|g.TOP);
  76.     g.setColor(item2Color);
  77.     if(isVolOn)
  78.     {
  79.       g.drawString("声音开",(width-font.stringWidth("声音开"))/2,
  80.                    menuOffset+font.getHeight()*2,g.LEFT|g.TOP);
  81.     } else
  82.     {
  83.       g.drawString("声音关",(width-font.stringWidth("声音关"))/2,
  84.                    menuOffset+font.getHeight()*2,g.LEFT|g.TOP);
  85.     }
  86.   }
  87.   public void start()
  88.   {
  89.     mainThread=new Thread(this);
  90.     mainThread.start();
  91.   }
  92.   public void run()
  93.   {
  94.     try
  95.     {
  96.       Thread currentThread=Thread.currentThread();
  97.       while(currentThread==mainThread)
  98.       {
  99.         startTime=System.currentTimeMillis();
  100.         action();
  101.         repaint(0,0,width,height);
  102.         serviceRepaints();
  103.         endTime=System.currentTimeMillis();
  104.         if((endTime-startTime)<FRAME_TIME)
  105.         {
  106.           Thread.sleep(FRAME_TIME-(endTime-startTime));
  107.         }
  108.       }
  109.     } catch(InterruptedException ie)
  110.     {
  111.       System.out.println(ie.toString());
  112.     }
  113.   }
  114.   protected void keyPressed(int keyCode)
  115.   {
  116.     judgeKeyCode(keyCode,getGameAction(keyCode));
  117.   }
  118.   protected void keyReleased(int keyCode)
  119.   {
  120.     freeKey(keyCode,getGameAction(keyCode));
  121.   }
  122.   public void judgeKeyCode(int keyCode,int GameKeyCode)
  123.   {
  124.     switch(GameKeyCode)
  125.     {
  126.       case Canvas.FIRE:
  127.         if(((allAction&LPKeyMask.MASK_KEY_OK)==0)
  128.            &&((allAction&LPKeyMask.MASK_KEY_OK_FLAG)==0))
  129.         {
  130.           allAction|=LPKeyMask.MASK_KEY_OK|LPKeyMask.MASK_KEY_OK_FLAG;
  131.         }
  132.         break;
  133.       case Canvas.UP:
  134.         if(((allAction&LPKeyMask.MASK_KEY_UP)==0)
  135.            &&((allAction&LPKeyMask.MASK_KEY_UP_FLAG)==0))
  136.         {
  137.           allAction|=LPKeyMask.MASK_KEY_UP|LPKeyMask.MASK_KEY_UP_FLAG;
  138.         }
  139.         break;
  140.       case Canvas.DOWN:
  141.         if(((allAction&LPKeyMask.MASK_KEY_DOWN)==0)
  142.            &&((allAction&LPKeyMask.MASK_KEY_DOWN_FLAG)==0))
  143.         {
  144.           allAction|=LPKeyMask.MASK_KEY_DOWN|LPKeyMask.MASK_KEY_DOWN_FLAG;
  145.         }
  146.         break;
  147.       case Canvas.LEFT:
  148.         if(((allAction&LPKeyMask.MASK_KEY_LEFT)==0)
  149.            &&((allAction&LPKeyMask.MASK_KEY_LEFT_FLAG)==0))
  150.         {
  151.           allAction|=LPKeyMask.MASK_KEY_LEFT|LPKeyMask.MASK_KEY_LEFT_FLAG;
  152.         }
  153.         break;
  154.       case Canvas.RIGHT:
  155.         if(((allAction&LPKeyMask.MASK_KEY_RIGHT)==0)
  156.            &&((allAction&LPKeyMask.MASK_KEY_RIGHT_FLAG)==0))
  157.         {
  158.           allAction|=LPKeyMask.MASK_KEY_RIGHT|LPKeyMask.MASK_KEY_RIGHT_FLAG;
  159.         }
  160.         break;
  161.       default:
  162.         switch(keyCode)
  163.         {
  164.           case Canvas.KEY_NUM2: //up
  165.             if(((allAction&LPKeyMask.MASK_KEY_UP)==0)
  166.                &&((allAction&LPKeyMask.MASK_KEY_UP_FLAG)==0))
  167.             {
  168.               allAction|=LPKeyMask.MASK_KEY_UP|LPKeyMask.MASK_KEY_UP_FLAG;
  169.             }
  170.             break;
  171.           case Canvas.KEY_NUM8: //down
  172.             if(((allAction&LPKeyMask.MASK_KEY_DOWN)==0)
  173.                &&((allAction&LPKeyMask.MASK_KEY_DOWN_FLAG)==0))
  174.             {
  175.               allAction|=LPKeyMask.MASK_KEY_DOWN|LPKeyMask.MASK_KEY_DOWN_FLAG;
  176.             }
  177.             break;
  178.           case Canvas.KEY_NUM4: //left
  179.             if(((allAction&LPKeyMask.MASK_KEY_LEFT)==0)
  180.                &&((allAction&LPKeyMask.MASK_KEY_LEFT_FLAG)==0))
  181.             {
  182.               allAction|=LPKeyMask.MASK_KEY_LEFT|LPKeyMask.MASK_KEY_LEFT_FLAG;
  183.             }
  184.             break;
  185.           case Canvas.KEY_NUM6: //right
  186.             if(((allAction&LPKeyMask.MASK_KEY_RIGHT)==0)
  187.                &&((allAction&LPKeyMask.MASK_KEY_RIGHT_FLAG)==0))
  188.             {
  189.               allAction|=LPKeyMask.MASK_KEY_RIGHT|LPKeyMask.MASK_KEY_RIGHT_FLAG;
  190.             }
  191.             break;
  192.           case Canvas.KEY_NUM5: //ok
  193.             if(((allAction&LPKeyMask.MASK_KEY_OK)==0)
  194.                &&((allAction&LPKeyMask.MASK_KEY_OK_FLAG)==0))
  195.             {
  196.               allAction|=LPKeyMask.MASK_KEY_OK|LPKeyMask.MASK_KEY_OK_FLAG;
  197.             }
  198.           break;
  199.         }
  200.       break;
  201.     }
  202.   }
  203.   public void freeKey(int keyCode,int gameKeyCode)
  204.   {
  205.     switch(gameKeyCode)
  206.     {
  207.       case Canvas.FIRE:
  208.         allAction&=~LPKeyMask.MASK_KEY_OK;
  209.         break;
  210.       case Canvas.UP:
  211.         allAction&=~LPKeyMask.MASK_KEY_UP;
  212.         break;
  213.       case Canvas.DOWN:
  214.         allAction&=~LPKeyMask.MASK_KEY_DOWN;
  215.         break;
  216.       case Canvas.LEFT:
  217.         allAction&=~LPKeyMask.MASK_KEY_LEFT;
  218.         break;
  219.       case Canvas.RIGHT:
  220.         allAction&=~LPKeyMask.MASK_KEY_RIGHT;
  221.         break;
  222.       default:
  223.         switch(keyCode)
  224.         {
  225.           case Canvas.KEY_NUM2: //up
  226.             allAction&=~LPKeyMask.MASK_KEY_UP;
  227.             break;
  228.           case Canvas.KEY_NUM8: //down
  229.             allAction&=~LPKeyMask.MASK_KEY_DOWN;
  230.             break;
  231.           case Canvas.KEY_NUM4: //left
  232.             allAction&=~LPKeyMask.MASK_KEY_LEFT;
  233.             break;
  234.           case Canvas.KEY_NUM6: //right
  235.             allAction&=~LPKeyMask.MASK_KEY_RIGHT;
  236.             break;
  237.           case Canvas.KEY_NUM5:
  238.             allAction&=~LPKeyMask.MASK_KEY_OK;
  239.           break;
  240.         }
  241.       break;
  242.     }
  243.   }
  244.   public void action()
  245.   {
  246.     if((allAction&LPKeyMask.MASK_KEY_UP_FLAG)!=0)
  247.     {
  248.       allAction&=~LPKeyMask.MASK_KEY_UP_FLAG;
  249.       if(whichActive!=0)
  250.       {
  251.         --whichActive;
  252.       } else
  253.       {
  254.         whichActive=2;
  255.       }
  256.     } else if((allAction&LPKeyMask.MASK_KEY_DOWN_FLAG)!=0)
  257.     {
  258.       allAction&=~LPKeyMask.MASK_KEY_DOWN_FLAG;
  259.       if(whichActive!=2)
  260.       {
  261.         ++whichActive;
  262.       } else
  263.       {
  264.         whichActive=0;
  265.       }
  266.     } else if((allAction&LPKeyMask.MASK_KEY_OK_FLAG)!=0)
  267.     {
  268.       allAction&=~LPKeyMask.MASK_KEY_OK_FLAG;
  269.       switch(whichActive)
  270.       {
  271.         case 0:
  272.           break;
  273.         case 1:
  274.           break;
  275.         case 2:
  276.           isVolOn=!isVolOn;
  277.         break;
  278.       }
  279.     }
  280.   }
  281. }
  282. class LPKeyMask
  283. {
  284.   public static final int MASK_KEY_LEFT=0x0001;
  285.   public static final int MASK_KEY_LEFT_FLAG=0x0100;
  286.   public static final int MASK_KEY_RIGHT=0x0002;
  287.   public static final int MASK_KEY_RIGHT_FLAG=0x0200;
  288.   public static final int MASK_KEY_UP=0x0004;
  289.   public static final int MASK_KEY_UP_FLAG=0x0400;
  290.   public static final int MASK_KEY_DOWN=0x0008;
  291.   public static final int MASK_KEY_DOWN_FLAG=0x0800;
  292.   public static final int MASK_KEY_OK=0x0010;
  293.   public static final int MASK_KEY_OK_FLAG=0x1000;
  294. }