J2ME:游戏框架_合金弹头,j2me合金弹头,最近研究的一段时间的游戏
分享于 点击 16954 次 点评:225
J2ME:游戏框架_合金弹头,j2me合金弹头,最近研究的一段时间的游戏
最近研究的一段时间的游戏代码,获益不小!细节的掌握不多,但对游戏的框架有了一定的了解。 现总结出几套游戏框架,在此写出供大家参考! 文章仅代表个人观点,如有观点请在论坛讨论 MSN alfylove@hotmail.com 合金代码 下载地址 http://www.j2medev.com/Soft/src/game/200610/789.htmlMid.java 开始启动线程 public class Mid extends MIDlet implements Runnablepublic Mid() { mscreen = new Game(); Display.getDisplay(this).setCurrent(mscreen); } public void run(){ if(mscreen.process()) this.notifyDestroyed(); } public void startApp() { (new Thread(this)).start(); } public void pauseApp() { mscreen.stayapp(); } public void destroyApp(boolean unconditional) { mscreen.exitapp(); }} //游戏主体部分Game.javapublic class Game extends Canvas { public MScreen() { face_load();//地图数据 sound_load();//声音载入 screen_index = SCREEN_RESSLOAD; //这个索引为游戏主索引 } ///////////////////////////////// ///////技巧部分///////// /////////////////////////////// public final void refresh() { repaint(); serviceRepaints(); } //刷新屏幕 public final void stayapp() { running = false; } //退出循环 public final void exitapp() { exitapp = true; } //退出程序 //相对坐标的转换 private final int toScreenx(int x) { return x - position_x; } private final int toScreeny(int y) { return y - position_y; } //////////////////////////////////////////// ///////// //////////// //////// 描绘 //////////// //////////////////////////////////////////// protected void paint(Graphics g) { if(process_lock) return; //游戏关键进程锁 g.setClip(0,0,screen_w, screen_h); process_draw(); } protected void process_draw() { if(process_lock) return; switch(screen_index){ case SCREEN_MAINMENU: mainmenu_draw(); break; case SCREEN_HELPINFO: helpinfo_draw(); break; case SCREEN_COPYRIGH: copyrigh_draw(); break; case SCREEN_GAMEBODY: gamebody_draw(); break; case SCREEN_GAMEOVER: gameover_draw(); break; case SCREEN_HIGHLIST: highlist_draw(); break; case SCREEN_RESSLOAD: ressload_draw(); break; case SCREEN_SELEGATE: selegate_draw(); break; } }///////////////////////////////////////////////////////////// 按键处理////////////////////////////////////////////////////////// protected void keyPressed(int keyCode) { setkeystate(keyConvert(keyCode), true); process_key(keyConvert(keyCode)); } protected void keyRepeated(int keyCode) { setkeystate(keyConvert(keyCode), true); } protected void keyReleased(int keyCode) { setkeystate(keyConvert(keyCode), false); }protected final void process_key(int keycode){ if(process_lock) return; switch(screen_index){ case SCREEN_GAMEBODY: gamebody_key(keycode); break; case SCREEN_MAINMENU: mainmenu_key(keycode); break; case SCREEN_HELPINFO: helpinfo_key(keycode); break; case SCREEN_COPYRIGH: copyrigh_key(keycode); break; case SCREEN_GAMEOVER: gameover_key(keycode); break; case SCREEN_HIGHLIST: highlist_key(keycode); break; case SCREEN_SELEGATE: selegate_key(keycode); break; case SCREEN_RESSLOAD: ressload_key(keycode); break; } }/////////////////////////////////////////// ///// 运行控制///////////////////////////////////////////////////////////// public final boolean process(){ int count = 0; long secon = 0; long timeold = 0; long timenow = 0; running = true; while (running && !exitapp) { if(exitapp) return true; timenow = System.currentTimeMillis(); if (timenow >= interval + timeold) {//FPS控制参见文章 如何控制游戏中的FPS http://www.j2medev.com/code/j2me/gui/200611/3802.html timeold = timenow; framenum = (framenum < 9999)? framenum +1 : 0; process_tick();//转入分支运行控制 //计算当前的刷新帧数 if(secon < (timenow / 1000)){ secon = timenow/1000; framesec = count; count = 1; }else count ++; } } return exitapp; } public final void process_tick() { if(process_lock) return; switch(screen_index){ case SCREEN_GAMEBODY: gamebody_run(); break; case SCREEN_MAINMENU: mainmenu_run(); break; case SCREEN_HELPINFO: helpinfo_run(); break; case SCREEN_COPYRIGH: copyrigh_run(); break; case SCREEN_GAMEOVER: gameover_run(); break; case SCREEN_HIGHLIST: highlist_run(); break; case SCREEN_RESSLOAD: ressload_exec(); break; case SCREEN_SELEGATE: selegate_run(); break; } } //////////////////////////////// ///////各部分方法///////// /////////////////////////////// 游戏分为GAMEBODY//游戏主体 MAINMENU//主菜单 HELPINFO//帮助信息 COPYRIGH//版权所有 HIGHLIST//高分显示 RESSLOAD//载入画面 SELEGATE//关卡选择 7个部分 每个部分都有5个方法 以mainmenu为例写出 //初使化 private final void mainmenu_init(){初使化mainmenu_index mainmenu_index = 0; } ////响应按键 private final void mainmenu_key(int keycode){/*里面内容省略*/ case KEY_SOFT1: mainmenu_execute(mainmenu_index);//转入按键执行 break; } //按键执行 private final void mainmenu_execute(int index){ /*按键响应相应命令 */ } //命令描绘 private final void mainmenu_run(){ refresh(); //描绘部分 private final void mainmenu_draw(){} } 总结来看这个游戏的框架是 主结构 构造函数(声音载入图片载入) PAINT (描绘-->分支描绘) RUN (运行-->分支运行) KEY (按键响应-->分支按键) 分支结构 init() key(int keycode) execute(int index)//转入命令执行(注 不是所有的都需要此执行可以把这个命令归 进key执行) run() //运行(描绘) draw() 这个游戏很清晰的显示游戏运行思路将大框架再小框架,便于修改和查找; 这里所给出的只是游戏框架部分,具体的AI和游戏主体框架出于篇幅没有给出,希望这篇文章能对新手有一定帮助!//该片段来自于http://byrx.net
用户点评