如何使用路径查找更新和移动对象?

时间:2013-12-27 16:48:13

标签: java game-engine path-finding slick2d 2d-games

我在我的2D游戏中实现了一些寻路,但我不知道如何移动我的'Zombie'角色。 我正在使用slick2d,并且所有内容都会在render方法中放到屏幕上,但是我想在Zombie类中更新僵尸运动。 这是僵尸类中的方法:

  public void findPrey(){

    Pathfinder pf = new Pathfinder();
    pf.setStartNode(xPosition,yPosition);

    for(PathCoordinates p: pf.calculatePath()){

        if(p.getXPosition() > xPosition){
            moveRight(2);               
        }if(p.getXPosition() < xPosition){
            moveLeft(2);
        }if(p.getYPosition() > yPosition){
            moveUp(2);
        }if(p.getYPosition() < yPosition){
            moveDown(2);
        }
    }
}

所以我想循环遍历x和y坐标列表并移动僵尸。 然而,没有事情发生 - 僵尸根本不动。

在我的'world'类中,我有渲染方法,它循环僵尸并渲染它们,代码已被略微编辑:

    public void render(GameContainer gc, StateBasedGame sbg, Graphics g)
        throws SlickException {


        for (Zombie z : zombies) {

        if (!z.isDead()) {

            z.render(gc, sbg, g);
            z.findPrey();


        }

    }

}

所以,基本上我的问题是 - 如何让我的僵尸角色移动?!感谢您提供任何帮助或指导

1 个答案:

答案 0 :(得分:0)

你应该首先移动僵尸,然后再渲染它。 还有一个问题:您允许使用一个findPrey()(在下面的代码中使用updatePosition())方法调用来移动僵尸。

Zombie class:

public void updatePosition() {
  Pathfinder pf = new Pathfinder();
  pf.setStartNode(xPosition,yPosition);
  PathCoordinates p = pf.calculatePath()[0];
  if(p.getXPosition() > xPosition) {
    moveRight(2);               
  } if(p.getXPosition() < xPosition) {
    moveLeft(2);
  } if(p.getYPosition() > yPosition) {
    moveUp(2);
  } if(p.getYPosition() < yPosition) {
    moveDown(2);
  }
}

世界级:

public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
  for(Zombie z : zombies) {
    if(!(z.isDead())) {
      z.updatePosition();
      z.render(gc, sbg, g);
    }
  }
}