刚做的飞机游戏,遇到问题,请指教!
主要就是飞机飞行的问题
主线程控制变化为:delay=20
public void run() {
Graphics g = getGraphics();
while (isPlay) {
this.drawScreen(g);
g.setColor(0xffffff);
flushGraphics();
if (buls.collidesWith(plane))
{
this.Gameover(g);
flushGraphics();
isPlay=false;
}
Planeinput();
buls.fly();
try {
Thread.sleep(delay);
}
catch (InterruptedException ie) {}
}
}
问题:目前在电脑上运行没问题,速度正常
在手机上飞行速度大大降低,并且按方向钮控制还会有延迟
是内存问题还是什么,请指教,谢谢
------解决方案--------------------估计是你框架有问题。现在的机能运行个入门级别的飞机游戏还是足够的。
虚拟机用一个线程处理UI。也就是说,这一个线程要做绘制屏幕的工作以及按键处理的工作。这样,如果你绘制屏幕很频繁,必然会影响到按键处理的即时相应。反过来也同理。
一般的处理办法是,尽量降低这个线程处理的工作强度。比如,按键事件中只记录相关按键信息,不处理涉及游戏逻辑的东西。游戏绘图改为画在一个离线缓冲区上,paint中只做把缓冲区输出到屏幕的工作。这样,做的事情一样多,但尽量转移系统UI线程的压力,可以得到快速的按键反应以及可控的屏幕刷新率。
顺便:游戏主线程逻辑处理最好不要和刷新率挂钩。否则在不同绘制能力的机器上,将会得到天壤之别的游戏速度。
------解决方案--------------------其实缓冲区说白了,就是创建一个跟屏幕大小的Image,你原来怎么画到屏幕上的,不要改变,现在就怎么画到那个Image对象上,然后在把Image一次性的画到屏幕上,这样做可以节省程序画屏的时间,提高效率,但是要多耗一定的内存