gpt4 book ai didi

java - 如何在继续方法之前暂停

转载 作者:行者123 更新时间:2023-11-29 08:03:17 24 4
gpt4 key购买 nike

现在,我知道有人问过这个问题,但我需要知道如何做到这一点,而不是在 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

最佳答案

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

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

例如,您应该拥有一个由三部分组成的系统:

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

我知道一开始听起来工作量很大,确实如此,但它比您原本需要做的工作要少得多。

关于java - 如何在继续方法之前暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13078548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com