[英]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.