我正在使用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类中添加了一个计数器变量,然后使用模块化,以便它不会被频繁调用。 感谢大家尝试提供帮助。
答案 0 :(得分:0)
我建议你使用计时器。然后在每台电脑游戏上都会以相同的速度运行,你的单位的移动将是固定的时间。
单位移动太快,因为每个循环单位都被移动了。额外的数量应该减少或减少单位移动的距离。