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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SIFT特征匹配算法介绍——寻找图像特征点的原理

    SIFT特征匹配算法介绍——寻找图像特征点的原理关于opencv的SIFT特征匹配算法原理的详细介绍,附有图文解析,希望能帮助到图像处理刚入门的朋友们(*^__^*)嘻嘻……

    2022年6月17日
    23
  • pycharm 社区版 安装配置django[通俗易懂]

    pycharm 社区版 安装配置django[通俗易懂]1pycharm创建工程后pipinstalldjango验证2使用命令创建项目django-adminstartproject你的项目名称命令完成后会生成一个项目于文件夹里面包含以下文件3执行以下命令pythonmanage.pymigrate然后执行pythonmanage.pyrunserver执行后会出现以下内容点击地址出现下图环境配置成功…

    2022年9月25日
    0
  • 免费的ssl证书申请_微信小程序证书从哪里找

    免费的ssl证书申请_微信小程序证书从哪里找最近微信小程序很火,技术迷的我自然要选择跟风学习一下。按照微信小程序的官方文档,发出request请求链接地址必须为https。如果是使用http访问请求,那么在使用微信webapp开发工具时,如果像下面一样勾选“

    2022年10月1日
    0
  • matlab画圆的命令_matlab画圆命令资料

    matlab画圆的命令_matlab画圆命令资料%%圆环面R=6;r=2;symsuv;ezmesh((R+r*cos(u))*cos(v),(R+r*cos(u))*sin(v),r*sin(u));axisequal;%%圆盘R=6;r=2;theta=linspace(0,2*pi,90);ph=linspace(r,R,30);[t,p]=meshgrid(theta,ph);r=t*0;[x,y,z]=pol…

    2022年6月19日
    27
  • ExecutorService详解[通俗易懂]

    ExecutorService详解[通俗易懂]前言    在我们的日常开发中,难免会使用到线程,部分还会用到多线程并发问题。我们知道,线程的创建和释放,需要占用不小的内存和资源。如果每次需要使用线程时,都new一个Thread的话,难免会造成资源的浪费,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪。不利于扩展,比如如定时执行、定期执行、线程中断,所以很有必要了解下ExecutorService的使用。…

    2022年9月11日
    0
  • UCOSII操作系统 第3课—UCOSII启动过程

    UCOSII操作系统 第3课—UCOSII启动过程1、初始化UCOSII(1)在调用UCOSII在任何的其他的服务之前,UCOSII要求首先调用初始化函数OSInit();这个函数的目的就是在整个系统启动之前,初始化所有的变量和数据结构。(2)其中,在OSInit()函数中建立空闲任务OS_TaskIdle();这个任务总是处于就绪态的,空闲任务的优先级是设置为最低的。(3)调用OSInit以后,任务控制块缓冲池中有OS_MAX_TASKS个任务控制块,事件控制缓冲区中有OS_MAX_EVENTS个事件控制块,消息队列缓冲池OS_Q中有OS_MAX

    2022年5月29日
    27

发表回复

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

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