java游戏中为多个实体设置方向的问题

java游戏中为多个实体设置方向的问题,java,entity,Java,Entity,我不想给我所有的gost实体一个随机的方向,但我不知道怎么做 我已经成功地将所有实体的方向设置为以X或Y步移动,但这是一个静态移动,是否有随机移动它们的方法?也许用某种定时器 private GameScreen gs; private boolean gameRunning = true; private int fps; private Entity player; private ArrayList<Entity> entityLi

我不想给我所有的gost实体一个随机的方向,但我不知道怎么做

我已经成功地将所有实体的方向设置为以X或Y步移动,但这是一个静态移动,是否有随机移动它们的方法?也许用某种定时器

    private GameScreen gs;

    private boolean gameRunning = true;
    private int fps;

    private Entity player;

    private ArrayList<Entity> entityList = new ArrayList<>();

    private HashMap<String, Boolean> keyDown = new HashMap<>();

        public void loadObjects() {
        Image playerImg = new ImageIcon(getClass().getResource("/playerImg.png")).getImage();
        Image gostImg = new ImageIcon(getClass().getResource("/gostImg.png")).getImage();

        player = new Entity(playerImg, 100, 200, 200);

        entityList.add(player);
        entityList.add(new Entity(gostImg, 224, 350, 60));
        entityList.add(new Entity(gostImg, 460, 250, 60));
        entityList.add(new Entity(gostImg, 624, 300, 60));
        entityList.add(new Entity(gostImg, 942, 550, 60));
        entityList.add(new Entity(gostImg, 520, 560, 60));
    }

    public void update(long deltaTime) {
        checkCollisionandRemove();

        if(keyDown.get("right")) {
            player.setDirectionX(1);
            player.setDirectionY(0);
        }
        else if(keyDown.get("left")){
            player.setDirectionX(-1);
            player.setDirectionY(0);
        }

        if(keyDown.get("up")) {
            player.setDirectionY(-1);
            player.setDirectionX(0);
        }
        else if(keyDown.get("down")) {
            player.setDirectionY(1);
            player.setDirectionX(0);
        }

        if(player.getX() < 0) {
            player.setX(0);
        }

        if(player.getX() > gs.getWidth() -  player.getWidth()) {
            player.setX(gs.getWidth() -  player.getWidth());
        }

        if(player.getY() < 0) {
            player.setY(0);
        }

        if(player.getY() > gs.getHeight() -  player.getHeight()) {
            player.setY(gs.getHeight() -  player.getHeight());
        }

        for(Entity entity : entityList) {
            entity.moveX(deltaTime);
            entity.moveY(deltaTime);
            entity.setDirectionX(1);

            if(entity.equals(player)) {
                player.setDirectionX(0);
                player.setDirectionY(0);
            }

            if(entity.getX() < 0){
                entity.setX(0);
            }

            if(entity.getX() > gs.getWidth() - entity.getWidth()) {
                entity.setX(gs.getWidth() - entity.getWidth());
            }

            if(entity.getY() < 0) {
                entity.setY(0);
            }

            if(entity.getY() > gs.getHeight() - entity.getHeight()) {
                entity.setY(gs.getHeight() - player.getHeight());
            }
        }

        player.moveX(deltaTime);
        player.moveY(deltaTime);

    }
私人游戏屏;
私有布尔gameRunning=true;
私人int fps;
私人实体参与者;
私有ArrayList entityList=新ArrayList();
private HashMap keyDown=new HashMap();
公共void loadObjects(){
Image playerImg=newimageicon(getClass().getResource(“/playerImg.png”)).getImage();
Image-gostImg=new-ImageIcon(getClass().getResource(“/gostImg.png”)).getImage();
player=新实体(playerImg,100200200);
entityList.add(播放器);
添加(新实体(gostImg,224350,60));
添加(新实体(gostImg,460250,60));
添加(新实体(gostImg,624300,60));
添加(新实体(gostImg,94255060));
添加(新实体(gostImg,520560,60));
}
公共无效更新(长deltaTime){
检查碰撞和移动();
if(keyDown.get(“right”)){
player.setDirectionX(1);
player.setDirectionY(0);
}
else if(keyDown.get(“left”)){
player.setDirectionX(-1);
player.setDirectionY(0);
}
if(keyDown.get(“up”)){
player.setDirectionY(-1);
player.setDirectionX(0);
}
else if(keyDown.get(“down”)){
player.setDirectionY(1);
player.setDirectionX(0);
}
if(player.getX()<0){
player.setX(0);
}
if(player.getX()>gs.getWidth()-player.getWidth()){
setX(gs.getWidth()-player.getWidth());
}
if(player.getY()<0){
player.setY(0);
}
if(player.getY()>gs.getHeight()-player.getHeight()){
player.setY(gs.getHeight()-player.getHeight());
}
for(实体:entityList){
实体.moveX(deltaTime);
实体移动(deltaTime);
实体.setDirectionX(1);
如果(实体相等(玩家)){
player.setDirectionX(0);
player.setDirectionY(0);
}
if(entity.getX()<0){
实体.setX(0);
}
if(entity.getX()>gs.getWidth()-entity.getWidth()){
setX(gs.getWidth()-entity.getWidth());
}
if(entity.getY()<0){
实体setY(0);
}
if(entity.getY()>gs.getHeight()-entity.getHeight()){
setY(gs.getHeight()-player.getHeight());
}
}
player.moveX(deltaTime);
player.moveY(deltaTime);
}

我不希望我的实体有一个随机方向而不是一个静态方向。

所以你有一些问题。首先,您有一个定义为全局变量的“gost”对象。然后多次设置它的值并将其添加到ArrayList中。我的假设是,您的列表中只有一个gost

这是您的代码,稍作修改。我没有做任何测试,但是试一下

private GameScreen gs;

private boolean gameRunning = true;
private int fps;

private Entity player;

//private Entity gost; Removed because I don't think you need this. 

private ArrayList<Entity> entityList = new ArrayList<>();

private HashMap<String, Boolean> keyDown = new HashMap<>();

public void loadObjects() {
    Image playerImg = new ImageIcon(getClass().getResource("/playerImg.png")).getImage();
    Image gostImg = new ImageIcon(getClass().getResource("/gostImg.png")).getImage();

    player = new Entity(playerImg, 100, 200, 200);
    //entityList.add(player); I don't think you need this either, unless you check all of your entities in your checkCollisionandRemove() method

    //Create your "Gost" entities this way.
    entityList.add(new Entity(gostImg, 224, 350, 10));
    entityList.add(new Entity(gostImg, 460, 20, 10));
    entityList.add(new Entity(gostImg, 624, 300, 10));
    entityList.add(new Entity(gostImg, 942, 550, 20));
    entityList.add(new Entity(gostImg, 520, 760, 30));
}
public void update(long deltaTime) {
    checkCollisionandRemove();

    if(keyDown.get("right")) {
        player.setDirectionX(1);
        player.setDirectionY(0);
    }
    else if(keyDown.get("left")){
        player.setDirectionX(-1);
        player.setDirectionY(0);
    }

    if(keyDown.get("up")) {
        player.setDirectionY(-1);
        player.setDirectionX(0);
    }
    else if(keyDown.get("down")) {
        player.setDirectionY(1);
        player.setDirectionX(0);
    }

    if(player.getX() < 0) {
        player.setX(0);
    }

    if(player.getX() > gs.getWidth() -  player.getWidth()) {
        player.setX(gs.getWidth() -  player.getWidth());
    }

    if(player.getY() < 0) {
        player.setY(0);
    }

    if(player.getY() > gs.getHeight() -  player.getHeight()) {
        player.setY(gs.getHeight() -  player.getHeight());
    }

    player.moveX(deltaTime);
    player.moveY(deltaTime);

    //Move each gost this way.
    for(Entity entity : entityList) {   
        /*
            If you need to include your player object into the entity list you will need a way to tell whether entity is a gost or player.
            Something like: if(entity.getType().equalsIgnoreCase("gost")) then move
        */

        entity.moveX(deltaTime);
        entity.moveY(deltaTime);
    }
}
私人游戏屏;
私有布尔gameRunning=true;
私人int fps;
私人实体参与者;
//私营实体gost;删除,因为我认为你不需要这个。
私有ArrayList entityList=新ArrayList();
private HashMap keyDown=new HashMap();
公共void loadObjects(){
Image playerImg=newimageicon(getClass().getResource(“/playerImg.png”)).getImage();
Image-gostImg=new-ImageIcon(getClass().getResource(“/gostImg.png”)).getImage();
player=新实体(playerImg,100200200);
//add(player);我认为您也不需要它,除非您在checkCollisionandRemove()方法中检查所有实体
//以这种方式创建“Gost”实体。
添加(新实体(gostImg,224350,10));
添加(新实体(gostImg,460,20,10));
添加(新实体(gostImg,624300,10));
添加(新实体(gostImg,94255020));
添加(新实体(gostImg,520760,30));
}
公共无效更新(长deltaTime){
检查碰撞和移动();
if(keyDown.get(“right”)){
player.setDirectionX(1);
player.setDirectionY(0);
}
else if(keyDown.get(“left”)){
player.setDirectionX(-1);
player.setDirectionY(0);
}
if(keyDown.get(“up”)){
player.setDirectionY(-1);
player.setDirectionX(0);
}
else if(keyDown.get(“down”)){
player.setDirectionY(1);
player.setDirectionX(0);
}
if(player.getX()<0){
player.setX(0);
}
if(player.getX()>gs.getWidth()-player.getWidth()){
setX(gs.getWidth()-player.getWidth());
}
if(player.getY()<0){
player.setY(0);
}
if(player.getY()>gs.getHeight()-player.getHeight()){
player.setY(gs.getHeight()-player.getHeight());
}
player.moveX(deltaTime);
player.moveY(deltaTime);
//这样移动每个gost。
对于(实体:entityList){
/*
如果需要将玩家对象包括在实体列表中,则需要一种方法来判断实体是gost还是玩家。
类似于:if(entity.getType().equalsIgnoreCase(“gost”))然后移动
*/
实体.moveX(deltaTime);
实体移动(deltaTime);
}
}

这里有很多问题。您正在将“gost”添加到列表中,但仅移动最后一个“gost”。您需要循环浏览实体列表。你在哪里设定方向?正如@SteveSmith所说,这个计划缺少一些部分。现在没有迭代循环