J2me开发大致框架「建议收藏」

J2me开发大致框架「建议收藏」J2me开发名目繁多.但大致框架还算有规律可寻,我根据开发经验给大家提点意见,做下总结:游戏的结构很多,不过基本上都是在一个游戏主循环内实现。程序里面的主循环包含了程序框架的最主要的结构体。J2me的程序一般都包含两个class文件,一个是MIDlet,一个是Displayable。一般我都是把游戏的主要代码放在Displayable这个类里面。这个类是基

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

   
    J2me开发名目繁多.但大致框架还算有规律可寻,我根据开发经验给大家提点意见,做下总

结:游戏的结构很多,不过基本上都是在一个游戏主循环内实现。程序里面的主循环包含了程

序框架的最主要的结构体。J2me的程序一般都包含两个class文件,一个是MIDlet,一个是

Displayable。一般我都是把游戏的主要代码放在Displayable这个类里面。这个类是基于事件

驱动的程序,有三个主要相应函数void paint(Graphics g),void keyPressed(int keyCode),

void keyReleased(int keyCode)。

1.使用Runnable和创建线程的主循环

一般主体的做法就是让Displayable这个类实现Runnable这个接口,然后在其构造函数中创建

一个线程,启动其run()函数,而run函数里面就包含了游戏的主循环。

随便找了段典型代码大家参照下语法吧:

public class GameMIDlet extends MIDlet {

  static GameMIDlet instance;

  Display display;

  GameDisplayable displayable = null;

 public GameMIDlet() {

    instance = this;

    display =  Display.getDisplay(this);

    displayable = new GameDisplayable();

  }

public void startApp() {

    display.setCurrent(displayable);

  }

public void pauseApp() {

  }
public void destroyApp(boolean unconditional) {

    displayable.running = false;

  }
public static void quitApp() {

    instance.destroyApp(true);

    instance.notifyDestroyed();

    instance = null;

  }

}
public class GameDisplayable extends FullCanvas implements Runnable 
{

  /** 主控制线程 */

  Thread MainThread = null;

  /** 游戏时钟间隔 毫秒为单位 */

  public static long timeinterval = 20;

  public static boolean Isstable = true;

  /* 用于游戏时钟的变量 */

  public static long timeold = 0;

  public static long timenow = 0;

  public long interval = 0;

  public static long frames_per_second = 0;

  int count = 0;

  long second = 0;

  public static boolean running = true;

public GameDisplayable() {

      // 开始主线程

    Thread MainThread = new Thread(this);

    MainThread.start();

  }
public void run() {

    while (running) {

      timenow = System.currentTimeMillis();

      interval = timenow - timeold;

      if (interval >= timeinterval) {

        timeold = timenow;

        Game_Process();

        if (second != (System.currentTimeMillis() / 1000)) {

          second = System.currentTimeMillis() / 1000;

          frames_per_second = count;

          count = 1;

       }
      else

          count++;
      }

      lib.sleep(30);

    }
}


2.不使用线程的主循环办法

这个办法只能在Nokia的平台上实现,而我只建议在Nokia 40的平台上做,这样不需要线程,

道理上来说节约了一些内存,如果不是内存很紧张的机型,那么最好还是使用上一种办法。

游戏的主循环放在MIDlet的class里面,具体做法如下:

 public class GameMIDlet extends MIDlet {

 GameDisplayable displayable = null;

 /** 游戏时钟间隔 毫秒为单位 */

  public static long  timeinterval = 0;

  //用于游戏时钟的变量

  public static long timeold = 0;

  public static long timenow = 0;

  public long interval = 0;

  public static long frames_per_second=0;

  int count=0;

  long second =0;

  public static boolean running = false;

  static boolean exitApp =false;

  public GameMIDlet() {

    displayable = new GameDisplayable();

    running =true;

  }
 public void startApp() {

    running =true;

    Display.getDisplay(this).setCurrent(displayable);

    while(running) {

      timenow = System.currentTimeMillis();

      interval = timenow - timeold;

      if (interval >= timeinterval) {

        timeold = timenow;

        displayable.Game_Process();

        if(second != (System.currentTimeMillis() /1000)){

            second = System.currentTimeMillis()/1000;

            frames_per_second = count;

            count = 1;

          }else

            count ++;

      }

    }

    if(exitApp) {

      destroyApp(true);

      notifyDestroyed();

    }
  }
  public void pauseApp() {

    running =false;

  }
  public void destroyApp(boolean unconditional) {

    running = false;

  }
  public static void quitApp() {

    running =false;

    exitApp =true;

  }
}

部分代码转贴.....
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157654.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • USB 转 RS-485 / 422 接口转换器

    USB 转 RS-485 / 422 接口转换器USB转RS-485/422接口转换器1.USB转RS-485/422接口转换器2.通信连接图USB<=>RS-422切换USB<=>RS-485切换3.连接器和信号4.故障与排除5.6位接线柱<==>5位接线柱References…

    2022年5月1日
    82
  • Sequelize多表联合查询案例

    Sequelize多表联合查询案例一、Table:现在有两个表,A和B,关联关系:MATCH表中的job_history_id与JOB_HISTORY表中的id相关联。二、需求:查询Match表中的user_id,report_comment,以及job_history_id所关联的JOB表中的job_link,在前端显示。三、Code:1.后端首先要建立两个表的关联:MatchScoreReportModel.belongsTo(JobHistoryModel,{foreignKey:’job_history

    2022年5月18日
    52
  • django url标签_未指定url怎么解决

    django url标签_未指定url怎么解决前言当我们访问网页的时候,后台返回列表中有n条数据,此时我们会使用分页,比如一页只展示10条,但是我们访问第一页的时候大多数情况下,都会给url一个默认值,访问的时候直接展示第一页数据案例我们的

    2022年7月30日
    5
  • 分页 模糊查询「建议收藏」

    分页 模糊查询「建议收藏」一、所有的web项目都会用到分页显示和模糊查询,对于有些人不知道该怎么写二、今天我用springMVC和myBatis写的分页和模糊分享给大家,不喜勿喷三、数据库是mysql四、其实写分页就是新建一个分页的类,定义页码每页数量共几页当前页数总数量五、判断多少页,获取总数量除以每页显示的数量,有余数+1页六、sql语句就是用…

    2022年5月11日
    44
  • centos7.0 web服务器搭建「建议收藏」

    centos7.0 web服务器搭建「建议收藏」centos7.0web服务器搭建前言按照先易后难排序,在vmware虚拟机环境下模拟,统一防火墙为Firewall,统一在xshell下操作终端实现搭建.(强烈建议新手安装选择带gui服务器这样终端操作可以复制,分析文件,熟系操作之后可以最小安装(如果没有桌面,用xshell连接操作终端比较方便),我就是进过这样的坑)关于搭建分为三步,第一步配置网络(非虚拟机…

    2022年5月28日
    43
  • 08_运行hadoop提供的示例程序

    08_运行hadoop提供的示例程序

    2021年8月22日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号