簡體   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