我每3秒钟在屏幕上创建和显示多个游戏对象时遇到问题。当只有一个对象但是如果我想创建多个时没有问题,则会出现问题。为了详细解释,有一个主要的游戏循环(与互联网上的现有循环相同)并且在那个游戏循环中,我每3秒钟就想创建一个新对象,添加到ArrayList然后更新游戏面板并每隔3秒显示屏幕上的所有对象。上面的代码块有效,但它太快,所以屏幕上充满了图像,我希望它是周期性的。我必须做什么?如果使用后台线程以防止UI线程阻塞,我该怎么办?
提前致谢。
这是我的代码块: 主线部分:
while (running) {
canvas = null;
try {
canvas = this.surfaceHolder.lockCanvas();
synchronized (surfaceHolder) {
beginTime = System.currentTimeMillis();
this.gamePanel.update();
this.gamePanel.render(canvas);
}
} finally {
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
} // end finally
}
我的MainGamePanel类中的和Update方法: public void update(){
int random = 5 + (int) (Math.random() * (200 - 5));
droid = new Carrier(BitmapFactory.decodeResource(getResources(),
R.drawable.image), random, 1);
Carriers.add(Carrier);
for (int i = 0; i < Carriers.size(); i++) {
Carrier CarrierTemp = Carriers.get(i);
CarrierTemp .update();
}
}
答案 0 :(得分:1)
这是一个基于您当前代码的解决方案:
把它放在你的主题的某个地方:
int savedtime = 0;
long lastTime;
你的update()方法中的:
//Calculate time since last update:
long now = System.currentTimeMillis();
savedtime += now - lastTime;
lastTime = now;
if(savedTime > 3000){//if more than three seconds have passed:
savedTime = 0;
int random = 5 + (int) (Math.random() * (200 - 5));
droid = new Carrier(BitmapFactory.decodeResource(getResources(),R.drawable.image), random, 1);
Carriers.add(Carrier);
}
for (int i = 0; i < Carriers.size(); i++) {
Carrier CarrierTemp = Carriers.get(i);
CarrierTemp .update();
}