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