网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > J2EE/J2ME
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.应用农历.
.使用JSR172解析XML.
.贪吃蛇手机游戏.
.在索尼爱立信JP7平台上自动启动M.
.将J2EE程序从weblogic移植到JBos.
.Servlet中jdbc应用高级篇之六.
.Jboss文档(一).
.测试遗留代码.
.一个简单的网络客户端.
.J2EE入门教程之三.
.最美的MVC,ORM方案-Ruby on Rai.
.J2EE系统优化的几点体会(一、对.
.J2me性能优化,避免内存溢出小结.
.解决J2EE系统应用性能问题常用优.
.Java语言程序员人生:J2ee的学习流.
.发送MP3文件.
.JBOSS4.0 JDBC数据源配置大全(二).
.J2EE实用技巧:提升JSP应用程序的.
.EnterpriseJavaBeansDistilled....
.详细讲解基于J2EE实现Web方式软交.

游戏框架之心得体会(1)

发表日期:2007-12-23


                                                    游戏框架之心得体会(1)

      最近研究的一段时间的游戏代码,获益不小!细节的掌握不多,但对游戏的框架有了一定的了解。
       现总结出几套游戏框架,在此写出供大家参考!
      文章仅代表个人观点,如有观点请在论坛讨论

      MSN alfylove@hotmail.com


文章出自 J2MEDEV 转载请注名出处


 合金代码 下载地址 http://www.j2medev.com/Soft/src/game/200610/789.Html

Mid.Java
 开始启动线程
 
public class Mid extends MIDlet implements Runnable

public 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.java

public 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和游戏主体框架出于篇幅没有给出,希望这篇文章能对新手有一定帮助!

(出处:)


上一篇:如何控制游戏中的FPS 人气:652
下一篇:J2ME登陆设计代码(Password MIDlet) 人气:895
浏览全部J2EE/J2ME的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐