Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java游戏-如何给敌人移动?_Java_Game Physics - Fatal编程技术网

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 

    }

}