Java游戏-如何给敌人移动?
我正在做一个射击游戏,用一个数组添加很多敌人,然后在地图上给他们一个随机的位置,但是我不知道如何让他们在到达他们的位置后移动。这是我的敌人阶级:Java游戏-如何给敌人移动?,java,game-physics,Java,Game Physics,我正在做一个射击游戏,用一个数组添加很多敌人,然后在地图上给他们一个随机的位置,但是我不知道如何让他们在到达他们的位置后移动。这是我的敌人阶级: import com.badlogic.gdx.math.Vector2; import java.util.Random; public class Enemy { private static final Random r = new Random(); int x = r.nextInt(36); int y = r.nextInt(24);
import com.badlogic.gdx.math.Vector2;
import java.util.Random;
public class Enemy {
private static final Random r = new Random();
int x = r.nextInt(36);
int y = r.nextInt(24);
Vector2 vect = new Vector2(x,y);
float ROTATION_SPEED = 500;
public Follower(float SPEED, float rotation, float width, float height,
Vector2 position) {
super(SPEED, rotation, width, height, position);
}
public void advance(float delta, Ship ship) {
if(rotation > 360)
rotation -= 360;
position.lerp(vect, delta);
rotation += delta * ROTATION_SPEED;
super.update(ship);
//Edited: i forget to put this lines:
if(vect.equals(this.getPosition())){
x = r.nextInt(36);
y = r.nextInt(24);
}
}
我应该在这个类中实现什么样的方法,使它们在一段时间后移动x/y值?Thread.sleep是在进行进一步处理之前先休眠一段时间的方法。您最好开始研究Java中的多线程,以便轻松解决此类问题。你可以从这里开始:
要立即解决问题,只需在while循环中编写Thread.sleep()。Thread.sleep是在进行进一步处理之前先休眠一段时间的方法。您最好开始研究Java中的多线程,以便轻松解决此类问题。你可以从这里开始:
要立即解决问题,只需在while循环中编写Thread.sleep()。如果使用Thread.sleep而不使用多线程,整个游戏将冻结。但您也可以使用计时器和TimerTask来解决此问题,这对初学者来说尤其容易(您可以在之前将其添加到代码中):
如果使用Thread.sleep而不使用多线程,整个游戏将冻结。但您也可以使用计时器和TimerTask来解决此问题,这对初学者来说尤其容易(您可以在之前将其添加到代码中):
你需要一个计时器来设置运动的动画。你需要一个计时器来设置运动的动画。While循环中的While Thread.sleep()当然是必要的。对于这样的事情,完整的多线程解决方案可能有点过头了。我目前正在编写一个3D游戏(不包括不是真正的多线程的图形卡),我还没有发现多线程在我的游戏中不起作用,如果我使用它,整个游戏将冻结,直到线程完成。顺便说一下,我忘了在问题中加入一些代码行,这给了我的敌人随机的位置。@MaderaRoberson-这就是为什么你需要立即研究多线程的原因。在Java6/7中,您需要从基本线程和runnable开始,然后可以查看ExecutorService以获得管理线程的简单方法。Aldo Future是一种创建异步操作的好方法,无需太多细节。如果没有任何MT选项,您将最终编写代码,该代码将是ST,并将等待某种形式的用户输入。对于战争类型的游戏,敌人和车辆需要自行移动,通常是MT环境。While循环中的While Thread.sleep()当然是必要的。对于这样的东西,完整的多线程解决方案可能有点过头了。我目前正在编写一个3D游戏(不包括不是真正的多线程的图形卡),我还没有发现多线程在我的游戏中不起作用,如果我使用它,整个游戏将冻结,直到线程完成。顺便说一下,我忘了在问题中加入一些代码行,这给了我的敌人随机的位置。@MaderaRoberson-这就是为什么你需要立即研究多线程的原因。在Java6/7中,您需要从基本线程和runnable开始,然后可以查看ExecutorService以获得管理线程的简单方法。Aldo Future是一种创建异步操作的好方法,无需太多细节。如果没有任何MT选项,您将最终编写代码,该代码将是ST,并将等待某种形式的用户输入。对于战争类游戏,敌人和车辆需要自行移动,这将永远是MT环境。
import java.util.Timer;
import java.util.TimerTask;
public class Enemy{
Timer t;
public Enemy(){ //in your constructor
t = new Timer();
t.scheduleAtFixedRate(new TimerTask(){
public void run(){
/*here the code for the movement, e.g:
x += 5;
y += 5;*/
}
}, delay, speed); //delay is after which time it should start usually delay is 0, speed is the time in ms e.g. 9
}
}