快速业务通道

J2ME 2D小游戏入门之旅(一)游戏的框架 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

J2ME 2D小游戏入门之旅(一)游戏的框架

时间:2011-08-09

一、游戏的框架

我们的游戏需要一个通用的游戏框架,也方便以后的开发,但实现一个引擎是复杂的。作为初学者如果要你考虑太多的问题,恐怕会让你偏离主线,这里只给出canvas的代码,不理解可以参看本站的另外一篇系列文章《使用MIDP2.0开发游戏》。

使用singlon实现,因为每个gamecanvas都需要很多的内存空间。另外对我们来说,只要改写gameInit(),gameMain(),一次性初始化的代码写在构造函数中。

public class MyGameCanvas extends GameCanvas implements Runnable, CommandListener{ private static MyGameCanvas instance; Graphics g; boolean running; Thread t; Command startcmd,exitcmd,restartcmd; int keystate; boolean keyevent; boolean key_up,key_down,key_left,key_right,key_fire; private boolean allowinput; public int screenwidth; public int screenheight; boolean gameover; //define your variable here //define your variable end protected MyGameCanvas() { super(true); g=getGraphics(); running=false; t=null; addCommand(startcmd=new Command("start",Command.OK,1)); addCommand(exitcmd=new Command("exit",Command.EXIT,1)); setCommandListener(this); screenwidth=getWidth(); screenheight=getHeight(); //put your init once code here //put your init once code end } synchronized public static MyGameCanvas getInstance() { if (instance == null) { instance = new MyGameCanvas(); System.out.println("new MyGameCanvas"); } return instance; } public void run(){ System.out.println("MyGameCanvas run start"); long st=0,et=0,diff=0; int rate=50;//16-17 frame per second while(running){ st=System.currentTimeMillis(); gameinput(); gameMain(); et=System.currentTimeMillis(); diff=et-st; if(diff //System.out.println("Sleep "+(rate-diff)); try { Thread.sleep(rate - diff); } catch (InterruptedException ex) {} }else{ //System.out.println("rush , and the frame using time: á"+diff); } } System.out.println("MyGameCanvas run end"); } public void start(){ if(!running){ running=true; t=new Thread(this); t.start(); } } private void gameMain() { g.setColor(0,0,0);//clear screen g.fillRect(0,0,getWidth(),getHeight()); background.paint(g);//draw background //g.setColor(255,255,255); //g.drawString("hello",1,1,g.TOP|g.LEFT); flushGraphics(); } private void gameInit() { gameover=false; gametime=0; gametimeoffset=System.currentTimeMillis(); allowinput=true; key_up=key_down=key_left=key_right=key_fire=false; } public void stop(){ if(running){ running = false; } } public void commandAction(Command c, Displayable d) { String cmdstr=c.getLabel(); if(cmdstr.equals("start")){ gameInit(); start(); removeCommand(startcmd); addCommand(restartcmd=new Command("restart",Command.OK,1)); }else if(cmdstr.equals("restart")){ stop(); while(t.isAlive()); gameInit(); start(); }else if(cmdstr.equals("exit")){ stop(); Navigate.midlet.destroyApp(false); Navigate.midlet.notifyDestroyed(); } } private void gameinput() { if(allowinput){ keystate=getKeyStates(); key

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号