随笔 - 9  文章 - 0  trackbacks - 0
<2011年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

搜索

  •  

最新评论

阅读排行榜

评论排行榜

GameCanvas.java
  1 package MyJava3;
  2 import com.nokia.mid.ui.FullCanvas;
  3 import javax.microedition.lcdui.Display;
  4 import javax.microedition.lcdui.Graphics;
  5 import javax.microedition.lcdui.Image;
  6 import javax.microedition.midlet.MIDlet;
  7 
  8 public class GameCanvas extends FullCanvas implements Runnable
  9 {
 10     //#------------------------------游戏主要部分------------------------------
 11     //#------------------------------公共变量------------------------------
 12     private boolean threadRunAble = true;//线程运行条件
 13     private Thread mainThread; //线程
 14     private int key_state = 0;//当前键值
 15     private boolean key_lock = false;//按键执行状态 ture 执行时候其他逻辑绘制代码不执行
 16     private int main_state; //1级状态变量
 17     private int countTime;//时间控制
 18     public final static int DC_KEY_SOFT_LEFT = -6//左软件(此键值为NOKIA键值)
 19     public final static int DC_KEY_SOFT_RIGHT = -7//右软件
 20     public final static int DC_KEY_SOFT_MID = -5;//中间键
 21     public final static byte ONE_MAIN_MIGLOGO = 0;//米格闪屏
 22     public final static byte ONE_MAIN_MENU = 3;//主菜单
 23     
 24     //&------------------------------公共变量------------------------------
 25       /**
 26        * 构造函数
 27        * 启动游戏主线程,初始化
 28        * @param midlet HeroMidlet
 29        */
 30     public GameCanvas(MIDlet midlet)
 31     {
 32         init_MainMiglogo();//一开始进入为LOGO状态
 33         Display.getDisplay(midlet).setCurrent(this);
 34         mainThread = new Thread(this);
 35         mainThread.start();//启动主线程
 36     }
 37     
 38      /**
 39        * 游戏主线程
 40        */
 41     public void run()//游戏主线程,不停的循环执行
 42     {
 43         while(threadRunAble)
 44         {
 45             if(!key_lock)
 46             {
 47                 process_All();//逻辑处理
 48                 repaint(); //绘制
 49                 serviceRepaints();
 50             }
 51         }
 52     }
 53     
 54      /**
 55        * 游戏绘制部分
 56        * 根据主状态处理不同的绘制
 57        * @param Graphics
 58        */
 59     public void paint(Graphics g)
 60     {
 61         switch(main_state)//根据当前状态处理当前状态的绘制
 62         {
 63         case ONE_MAIN_MIGLOGO:
 64                         draw_MainMiglogo(g);//如果是LOGO状态处理LOGO的绘制
 65                         break;
 66         case ONE_MAIN_MENU:
 67                         draw_MainMenu(g);//如果是MENU状态处理MENU的绘制
 68                             break;
 69         }
 70     }
 71     
 72      /**
 73        * 游戏逻辑控制部分
 74        * 根据主状态处理不同的逻辑
 75        */
 76     protected void process_All()
 77     {
 78         switch(main_state)
 79         {
 80         case ONE_MAIN_MIGLOGO:
 81                         process_MainMiglogo(key_state);//如果是LOGO状态处理LOGO的逻辑
 82                         break;
 83         case ONE_MAIN_MENU:
 84                         process_MainMenu(key_state);//如果是MENU状态处理MENU的逻辑
 85                         break;
 86         }
 87     }
 88     
 89      /**
 90        * 游戏逻辑控制部分2,按键处理
 91        * 根据主状态处理不同的逻辑
 92        * @param keyCode
 93        */
 94     protected void keyPressed(int keyCode)//当按键按下去执行一次
 95     {
 96         key_lock = true;
 97         key_state = keyCode;
 98         switch(main_state)
 99         {
100         case ONE_MAIN_MIGLOGO:
101                         key_MainMiglogo(key_state);//如果是LOGO状态处理LOGO的按键处理
102                         break;
103         case ONE_MAIN_MENU:
104                          key_MainMenu(key_state);//如果是MENU状态处理MENU的按键处理
105                          break;
106         }
107         key_lock = false;
108     }
109     
110     /**
111        * 释放按键处理
112        * @param keyCode int
113        */
114     protected void keyReleased(int keyCode)//当按键松开执行一次
115     {
116         key_state = 0;
117     }
118     
119     //&------------------------------游戏主要部分------------------------------
120       //***********************1***********************
121     protected void init_MainMiglogo()//LOGO状态初始化
122     {
123         countTime = 0;
124         main_state = ONE_MAIN_MIGLOGO;
125     }
126     
127     Image logoImg;
128     
129     public final static Image loadImg(String pictureName)
130     {
131         Image img = null;
132         try
133         {
134             img = Image.createImage("/bin/"+pictureName+".png");
135         }
136         catch(Exception e)
137         {
138             e.printStackTrace();
139         }
140         return img;
141     }
142     protected void draw_MainMiglogo(Graphics g)//LOGO状态绘制
143     {
144         g.setClip(00240320);
145         g.setColor(0x000000);
146         g.fillRect(00240320);//清屏
147         g.setColor(0xffffff);
148         logoImg = loadImg("logo");
149         //g.drawImage(logoImg,240>>1,320>>1,Graphics.HCENTER | Graphics.VCENTER);
150         g.drawString("是否开启音乐?"731200);
151         g.drawString(""53000);
152         g.drawString(""2203000);
153         
154     }
155     
156     protected void process_MainMiglogo(int keyCode)//LOGO状态逻辑处理
157     {
158         countTime++;
159         if(countTime > 50)//20次循环后转入菜单状态
160         {
161             out_MainMiglogo();
162             init_MainMenu();
163         }
164     }
165     
166     protected void key_MainMiglogo(int keyCode) //LOGO状态逻辑处理
167     {
168         
169     }
170     
171     protected void out_MainMiglogo() //退出LOGO状态
172     {
173         
174     }
175     
176      //***********************2***********************
177     protected void init_MainMenu()//MENU状态初始化
178     {
179         countTime = 0;
180         main_state = ONE_MAIN_MENU;
181     }
182     
183     protected void draw_MainMenu(Graphics g)//MENU状态绘制
184     {
185         g.setClip(00240320);
186         g.setColor(0x000000);
187         g.fillRect(00240,320);//清屏
188         g.setColor(0xffffff);
189         g.drawString("this Menu"000);
190         g.drawString(""+key_state, 0200);
191     }
192 
193     protected void process_MainMenu(int keyCode) //MENU状态逻辑
194     {
195         
196     }
197     
198     protected void key_MainMenu(int keyCode)//MENU状态退出
199     {
200         switch(key_state)
201         {
202         case DC_KEY_SOFT_LEFT:
203                     threadRunAble = false;//关闭线程
204                     myMIDlet.quitApp();//关闭程序
205                     break;
206         }
207     }
208 }
209 
210 

myMIDlet.java

  1 package MyJava3;
  2 import javax.microedition.midlet.*;
  3 
  4 public class myMIDlet extends MIDlet
  5 {
  6     static myMIDlet instance;//生成一个静态的myMIDlet的实例
  7     GameCanvas displayable;//创建一个myCanvas实例
  8     
  9     public myMIDlet()
 10     {
 11         instance = this;
 12     }
 13     
 14     public void startApp()//启动(该方法必须存在)
 15     {
 16         displayable = new GameCanvas(this);
 17     }
 18     
 19     public void pauseApp()//暂停(该方法必须存在)
 20     {
 21         
 22     }
 23     
 24     public void destroyApp(boolean unconditional)//销毁(该方法必须存在)
 25     {
 26         
 27     }
 28 
 29     public static void quitApp()//退出,此方法为JBuilder自动为我们生成,但不是必须的,你可以自定义其名称和内容以完成退出功能
 30     {
 31         instance.destroyApp(true);
 32         instance.notifyDestroyed();
 33         instance = null;
 34     }
 35 }

     






















































































posted on 2011-11-25 20:39 zhangwei 阅读(235) 评论(0)  编辑  收藏 所属分类: J2ME