@Override
protected void onDraw(Canvas canvas) {
//Drawing the background and sprites as it is a blackboard.
canvas.drawBitmap(scaledbmp, 0, 0, null);
sprite.onDraw(canvas);
boolean new_missle = true;
missileStartTime = System.nanoTime();
for (int i = missleslist.size() - 1; i >= 0; i--) {
if (new_missle) {
missleslist.get(i).onDraw(canvas);
new_missle = false;
}
if (!new_missle && (missileStartTime - System.nanoTime()) == 1000000){
new_missle = true;
missileStartTime = System.nanoTime();
}
}
}
你好,我先发布了我的代码。我在这里要做的是在板上绘制导弹,但不能同时绘制它们并在x毫秒/微秒后单独绘制它们。无论如何这个代码不起作用,我不明白为什么。
基斯
答案 0 :(得分:1)
您的情况有误,您希望您的纳米时间恰好等于' 1000000'当它到达这部分代码时,这将是非常幸运的。您应该使用> =
你确定你的循环应该如何工作吗?你无法控制它循环的速度(好吧,不是那样,它不应该是你的目标),而且每次循环你都会失去可能发射的导弹。例如,可以从以下内容开始:
//as long as you have missiles, it'll try to fire
while(missleslist.size() > 0) {
if (System.nanoTime() - missileStartTime >= 1000000){
missleslist.get(0).onDraw(canvas);
missleslist.remove(0);
missileStartTime = System.nanoTime();
}
}
答案 1 :(得分:1)
正如其他人已经指出现有代码中存在的一些问题,我不会在这里重复它们。
由于您在问题中标记了android-studio(错误)并且因为您使用的是View#onDraw(Canvas)
,我认为您正在谈论Android。
您应该使用Android的Handler类,尤其是Handler#postDelayed(int)
方法,以延迟以后执行的代码:
@Override
protected void onDraw(Canvas canvas) {
//Drawing the background and sprites as it is a blackboard.
canvas.drawBitmap(scaledbmp, 0, 0, null);
sprite.onDraw(canvas);
startDrawingMissiles(canvas, missileList, 0);
}
private void startDrawingMissiles(Canvas canvas, List<Missiles> missileList,
int currentIndex) {
if (currentIndex < missileList.size()) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
missileList.get(currentIndex).onDraw(canvas);
startDrawingMissiles(canvas, missileList, ++currentIndex);
}
}, 1000000); // <- Your duration
}
}
上面的代码可能存在一些微妙的问题,但它说明了您尝试实现的目标。