如何在继续方法之前暂停一下

时间:2012-10-25 22:52:58

标签: java methods delay

现在,我知道这已被问到,但我需要知道如何在html或其他任何内容上执行此操作。继承我的代码,不包括所有其他java文件。

package rtype;

import java.awt.Image;
import java.awt.event.KeyEvent;

import java.util.ArrayList;

import javax.swing.ImageIcon;

public class aa {
private int xd;
private int yd;
private int dx;
private int dy;
private int x;
private int y;
private Image image;

private ArrayList missiles;

private final int CRAFT_SIZE = 70;

public aa() {
    ImageIcon ii = new ImageIcon(this.getClass().getResource("/aa.png"));
    image = ii.getImage();
    missiles = new ArrayList();
    x = 10;
    y = 10;
    xd = -14;
    yd = 140;
}


public void move() {
    if(y >=xd)
        y += dx;
    else if(y < xd)
        y += 1;
    if(y <=yd)
        y += dy;
    else if(y > yd)
        y += -1;
}

public int getX() {
    return x;
}

public int getY() {
    return y;
}

public Image getImage() {
    return image;
}

public ArrayList getMissiles() {
    return missiles;
}

public void keyPressed(KeyEvent e) {

    int key = e.getKeyCode();

    if (key == KeyEvent.VK_SPACE) {
        fire();
    }

    if (key == KeyEvent.VK_UP) {
        dy = -1;
    }

    if (key == KeyEvent.VK_DOWN) {
        dy = 1;
    }

    if (key == KeyEvent.VK_RIGHT) {
        yd++;
    }

    if (key == KeyEvent.VK_LEFT) {
        yd--;
    }

    if (key == KeyEvent.VK_W) {
        xd++;
    }

    if (key == KeyEvent.VK_S) {
        xd--;
    }
}

public void fire() {
    try{
    missiles.add(new Missle(x + CRAFT_SIZE, y + CRAFT_SIZE));
    }catch(Exception e){}
}

public void keyReleased(KeyEvent e) {
    int key = e.getKeyCode();

    if (key == KeyEvent.VK_UP) {
        dy = 0;
    }

    if (key == KeyEvent.VK_DOWN) {
        dy = 0;
    }
}
}

所以,在方法中,fire(),我想让它在两次拍摄之间延迟。怎么样?

抱歉,如果这是n00bish

4 个答案:

答案 0 :(得分:3)

正如已经指出的那样,Thread.sleep()是您问题的直接答案。

然而,看看你的代码,我可以看到你想用它来计时动画,而Thread.sleep()不是一个好主意。 (我不想在这里详细介绍,尝试一下,没有任何伤害,你很快就会明白为什么。)

你应该拥有的是三部分系统:

  1. 第一部分处理输入并将其转换为命令。这些命令会立即放入队列中。
  2. 第二部分是游戏引擎线程。顾名思义,这是一个单独的线程,它执行自己的计时(“心跳”)。你当然可以在这里使用Thread.sleep(),记住它偶尔可能会非常不准确。该引擎从队列中获取命令,处理它们并更新内部游戏状态(例如坐标)。
  3. 第三部分是显示更新线程。同样,这是一个与上述两个分开的线程,它也有自己独立的心跳,它可能以不同的速度运行到游戏引擎,因为你可能想要比显示更频繁地更新游戏的内部状态。这是处理实际图像和绘图的一点。
  4. 我知道这听起来好像很多工作,但它的工作量比你原本要做的少得多。

答案 1 :(得分:1)

您可以使用Thread.sleep(1000);睡眠1000毫秒(1秒)。

请注意,您必须捕获InterruptedException:

try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    // Handle here
}

答案 2 :(得分:1)

尝试Thread.sleep(1000)每千人是一秒钟,例如, 如果你想要它5秒Thread.sleep(5000)希望我帮助你!

答案 3 :(得分:0)

Thread.sleep(x);

其中x以毫秒为单位。有关详细信息,请参阅tutorial on sleep()