繁体   English   中英

减慢敌人的行动

[英]Slow down enemy movement

我正在使用slick2d制作游戏,并且IVE创建了寻路算法,该算法将使“僵尸”找到通往主角的最短路径。

  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类中添加了一个计数器变量,然后使用了模块化,因此不会被频繁调用。 感谢大家的帮助。

我建议您使用计时器。 然后,在每台计算机上,游戏将以相同的速度运行,并且单位的移动将以固定的时间进行。

单元移动太快,因为每个循环单元都移动。 回路的数量应小于或减小单位移动的距离。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM