减缓敌人的运动

时间:2013-12-29 16:27:52

标签: java performance game-engine slick2d

我正在使用slick2d制作游戏 - 并且我创建了一个寻路算法,这将允许'僵尸'找到通往主要英雄的最短路径。

  public void findPrey(int characterXPosition,int characterYPosition){

    Pathfinder p = new Pathfinder();
    n =  p.aStar(xPosition,yPosition,characterXPosition,characterYPosition);
    //n is a linked list which holds node objects in the path
    if(!n.isEmpty()){
        xPosition = (n.get(0).x);
        yPosition = (n.get(0).y);   
    }   
}

目前这个有效,但它只是让僵尸快速移动一块瓷砖(32x32) - 就像太快了!

我尝试了这个:

        if(xPosition > n.get(0).x){
            xPosition -= .1f * delta;

        }
        else if(xPosition < n.get(0).x){
            xPosition += .1f * delta;

        }
        if(yPosition < n.get(0).y){
            yPosition += .1f * delta;

        }
        else if(yPosition > n.get(0).y){
            yPosition -= .1f * delta;

        }

只有当僵尸向上或向左移动时才会起作用 - 即使它真的是跳跃的,如果它意味着向下或向右移动,它就会精神错乱,只是不断向上移出屏幕。

所以任何人都知道如何减慢第一种技术的运动 - 或者知道为什么第二种技术不起作用? 谢谢你的帮助!

编辑 - 答案

好的想出一个解决方案 - 非常基本,我想只是盯着相同的代码几个小时就可以了。

在我的'世界'类的渲染方法中,僵尸被渲染,我只是把这个变化放在:

    Iterator<Zombie> i = zombies.iterator();
    while (i.hasNext()) {
        Zombie z = i.next();

        if (!z.isDead()) {      
            z.updateDelta(newDelta);
            z.incrementCounter(); //put a counter variable in
            if(z.getCounter() % 40 == 0){
                z.findPrey((int)shiftX,(int)shiftY);
            }

            z.render(gc, sbg, g);
        }else{
            i.remove();
        }
    }

所以我基本上只是在Zombie类中添加了一个计数器变量,然后使用模块化,以便它不会被频繁调用。 感谢大家尝试提供帮助。

1 个答案:

答案 0 :(得分:0)

我建议你使用计时器。然后在每台电脑游戏上都会以相同的速度运行,你的单位的移动将是固定的时间。

单位移动太快,因为每个循环单位都被移动了。额外的数量应该减少或减少单位移动的距离。