欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

J2ME:游戏框架_合金弹头,j2me合金弹头,最近研究的一段时间的游戏

来源: javaer 分享于  点击 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
相关栏目:

用户点评