飞机游戏运行缓冲区问题!flyingghost(游魂)等高手速来解决
目前做拉个飞机飞行的小游戏
在电脑上运行没问题,在真机上就出问题
飞机是个精灵类,在线程中根据输入来控制飞机运行 delay=20
线程如下
public void run() {
Graphics g = getGraphics();
while (isPlay) {
this.drawScreen(g);//重新绘制画面
g.setColor(0xffffff);
flushGraphics();
Planeinput();//按键输入来调整飞机位置控制飞行
try {
Thread.sleep(delay);
}
catch (InterruptedException ie) {}
}
}
根据flyingghost(游魂)解释,感觉确实应该开辟个缓冲区来进行绘制
但目前有几个疑问
1:现在飞机的精灵类开辟缓冲区?
2:我如何开辟缓冲区?
3:有没有例子,给我看看,完毕
------解决方案--------------------我已经在你的原帖子回过了,顺便帮你贴过来吧:
其实缓冲区说白了,就是创建一个跟屏幕大小的Image,你原来怎么画到屏幕上的,不要改变,现在就怎么画到那个Image对象上,然后在把Image一次性的画到屏幕上,这样做可以节省程序画屏的时间,提高效率,但是要多耗一定的内存
------解决方案--------------------书上有讲的
------解决方案--------------------Image screenBuffer=Image.createImage(WIDTH,HEIHGT);//创建离线缓冲区
Graphics g=screenBuffer.getGraphics();//得到缓冲区的g点
g.drawdrawdrawdrawdraw.........//画。其实都画在screenBuffer上了。
repaint();//叫canvas重绘
serviceRepaints();//宁肯绘制速度降低游戏线程速度降低也不肯丢帧的话加上这句
public void paint(Graphics acturalG){//真正的paint方法里就一句:
actoralG.drawImage(screenBuffer,0,0,Graphics.LEFT|Graphics.TOP);
}
------解决方案--------------------有个质疑,其实GameCanvas已经是实现双缓冲了。
以上的方法适用于普通的Canvas。
------解决方案--------------------同问楼上的质疑