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)
上一篇 2022年7月27日 下午3:46
下一篇 2022年7月27日 下午3:46


相关推荐

  • mybatiscodehelperpro激活码2.9.4【2021免费激活】[通俗易懂]

    (mybatiscodehelperpro激活码2.9.4)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1STL5S9V8F-eyJsaWNlb…

    2022年3月27日
    1.2K
  • IDEA使用模板自动生成类注释和方法,解决方法注释在接口中或普通类的方法外使用模板注释不带参数的情况

    IDEA使用模板自动生成类注释和方法,解决方法注释在接口中或普通类的方法外使用模板注释不带参数的情况IDEA自动生成类注释和方法注释类注释方法注释类注释按照下方路径打开设置File->Settings->Editor->FileandCodeTemplates->Includes->FileHeaderFileHeader代码/***@author${USER}*@dateCreatedin${DATE}${TIME}*@modifiedBy${USER}in${DATE}${TIME

    2022年8月30日
    7
  • mac idea 2021激活码-激活码分享

    (mac idea 2021激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
    150
  • SQL中EXISTS的使用

    SQL中EXISTS的使用1.简介不相关子查询:子查询的查询条件不依赖于父查询的称为不相关子查询。相关子查询:子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询,带EXISTS的子查询就是相关子查询EXISTS表示

    2022年7月4日
    27
  • C#的AutoSize「建议收藏」

    C#的AutoSize「建议收藏」将AutoSize设置为false,控件大小随着Form的变化而变大或者缩小。如果为true,出现问题。转载于:https://www.cnblogs.com/mantian/archive/2010/08/04/1792480.html

    2022年5月3日
    53
  • Oracle函数之DECODE函数

    Oracle函数之DECODE函数1.语法2.用途DECODE函数将expr与search的值逐个比较。如果expr与search值相等,Oracle返回search相应的result。如果expr与search值都不匹配,Oracle返回default,如果没有函数中没有赋值default,Oracle返回null。这些参数可以是任何数字类型(NUMBER,BINARY_F…

    2022年7月25日
    16

发表回复

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

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