1

我正在做一个射击游戏并用数组添加很多敌人,然后在地图上给他们一个随机的位置,但我不知道如何让他们到达他们的位置后移动。这是我的敌人课:

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 值?

4

2 回答 2

1

当你在没有多线程的情况下使用 Thread.sleep 时,整个游戏将冻结。但是您也可以使用 Timer 和 TimerTask 来解决它,这对于初学者来说很容易(您可以在之前将其添加到您的代码中):

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 

    }

}
于 2019-02-25T15:50:25.257 回答
0

Thread.sleep 是在进行进一步处理之前休眠一段时间的方式。您最好开始研究 Java 中的多线程以轻松解决此类问题。您可以从这里开始:http: //docs.oracle.com/javase/tutorial/essential/concurrency/

要立即解决,只需在 while 循环中编写 Thread.sleep() 即可。

于 2013-09-29T08:57:52.313 回答