1

现在,我知道有人问过这个问题,但我需要知道如何在 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

4 回答 4

2

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

但是,查看您的代码,我可以看到您想使用它来为动画计时,这Thread.sleep()不是一个好主意。(这里不想讲太多细节,试试看,没有坏处,你很快就会明白为什么。)

相反,您应该拥有的是一个三部分系统:

  1. 第一部分处理输入并将其转换为命令。命令立即放入队列中。
  2. 第二部分是游戏引擎线程。顾名思义,这是一个单独的线程,它自己计时(“心跳”)。你当然可以Thread.sleep()在这里使用,记住它有时会非常不准确。该引擎从队列中获取命令,处理它们并更新内部游戏状态(例如坐标)。
  3. 第三部分是显示更新线程。同样,这是与上述两个线程不同的线程,它也会有自己独立的心跳,它可能以与游戏引擎不同的速度运行,因为您可能希望比显示更频繁地更新游戏的内部状态. 这是处理实际图像和绘图的位。

我知道一开始这听起来像是很多工作,但它比你必须做的工作少得多。

于 2012-10-25T23:12:04.273 回答
1

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

请注意,您必须捕获 InterruptedException:

try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    // Handle here
}
于 2012-10-25T22:55:45.107 回答
1

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

于 2015-07-06T17:02:18.487 回答
0
Thread.sleep(x);

x以毫秒为单位。有关更多信息,请参阅sleep() 教程

于 2012-10-25T22:55:34.497 回答