如何让代码在java中经过一段时间后运行

时间:2015-06-09 19:10:00

标签: java android

    @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毫秒/微秒后单独绘制它们。无论如何这个代码不起作用,我不明白为什么。

基斯

2 个答案:

答案 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)

正如其他人已经指出现有代码中存在的一些问题,我不会在这里重复它们。

由于您在问题中标记了(错误)并且因为您使用的是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 
    }
}

上面的代码可能存在一些微妙的问题,但它说明了您尝试实现的目标。