扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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<rate){ //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()); flushGraphics(); } private void gameInit() { gameover=false; 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(); keyevent=false; if((keystate & UP_PRESSED)!=0){//up key_up=true;keyevent=true; //deal your unstop job code here //System.out.println("up press"); //deal your unstop job code end }else if((keystate & UP_PRESSED)==0){//release key if(key_up==true){ key_up=false; //deal your one press-one job code here //System.out.println("up release"); //deal your one press-one job code end } } if((keystate & DOWN_PRESSED)!=0){//down key_down=true;keyevent=true; //deal your unstop job code here //System.out.println("down press"); //deal your unstop job code end }else if((keystate & DOWN_PRESSED)==0){//release key if(key_down==true){ key_down=false; //deal your one press-one job code here //System.out.println("down release"); //deal your one press-one job code end } } if((keystate & LEFT_PRESSED)!=0){//left key_left=true;keyevent=true; //deal your unstop job code here //System.out.println("left press"); //deal your unstop job code end }else if((keystate & LEFT_PRESSED)==0){//release key if(key_left==true){ key_left=false; //deal your one press-one job code here //System.out.println("left release"); //deal your one press-one job code end } } if((keystate & RIGHT_PRESSED)!=0){//right key_right=true;keyevent=true; //deal your unstop job code here //System.out.println("right press"); //deal your unstop job code end }else if((keystate & RIGHT_PRESSED)==0){//release key if(key_right==true){ key_right=false; //deal your one press-one job code here //System.out.println("right release"); //deal your one press-one job code end } } if((keystate & FIRE_PRESSED)!=0){//fire key_fire=true;keyevent=true; //deal your unstop job code here //System.out.println("fire press"); //deal your unstop job code end }else if((keystate & FIRE_PRESSED)==0){//release key if(key_fire==true){ key_fire=false; //deal your one press-one job code here //System.out.println("fire release"); //deal your one press-one job code end } } if(!keyevent){ //no keyevent here //System.out.println("NO KEY press"); //no keyevent end } } } public static void cleanJob(){ instance=null; } } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者