(Gra) Mob nie nie zbliża się do gracza

0

Witam, piszę aktualnie grę na Androida. Aktualnie moje rozwiązanie działa połowicznie i nie mam pojęcia dlaczego. Otóż wyznaczanie ścieżki odbywa się za pomocą algorytmu Dijkstry i tutaj mamy:

        Dijkstra dijkstra = new Dijkstra(g, vertices[enemyNode].getLabel());
        list = new ArrayList<>();
        for (Vertex ve : dijkstra.getPathTo(String.valueOf(chibiNode)))
            list.add(ve.getLabel());

gdzie list to lista wierzchołków od postaci do moba (potwora), a mapa jest podzielona na jednakowe kwadraty dla łatwiejszej orientacji.

public abstract class GameMovingObject {

(...)

    public void update()  {
        this.colUsing++;
        if(colUsing >= this.colCount)  {
            this.colUsing =0;
        }
        // Current time in nanoseconds
        long now = System.nanoTime();

        // Never once did draw.
        if(lastDrawNanoTime==-1) {
            lastDrawNanoTime= now;
        }
        // Change nanoseconds to milliseconds (1 nanosecond = 1000000 milliseconds).
        int deltaTime = (int) ((now - lastDrawNanoTime)/   777777 );

        // Distance moves
        float distance = velocity * deltaTime;

        double movingVectorLength = Math.sqrt(movingVectorX* movingVectorX + movingVectorY*movingVectorY);

        // Calculate the new position of the game character.
        this.x = x +  (int)(distance* movingVectorX / movingVectorLength);
        this.y = y +  (int)(distance* movingVectorY / movingVectorLength);

    }

public class Enemy extends GameMovingObject {

(...) 

 public void showAttention(Canvas canvas, Paint p, ChibiCharacter chibi) {


        if (list.size() > 0) {
            for (int i = 0; i < list.size(); i++) {
                if ((getX() + (getWidth() / 2)) != (pathX.get(pathX.size() - 1)) || (getY() + (getHeight() / 2)) != (pathY.get(pathY.size() - 1))) {
                    if (pathX.size() > i + 1)
                        canvas.drawLine(pathX.get(i), pathY.get(i), pathX.get(i + 1), pathY.get(i + 1), pt.pBlack);
                }
            }
        }
        if (Integer.parseInt(list.get(1)) == gs.enemyNode + 6 && list.size() > 2)
            movingVectorY = 1;
        if (Integer.parseInt(list.get(1)) == gs.enemyNode + 1 && list.size() > 2)
            movingVectorX = 1;
        if (Integer.parseInt(list.get(1)) == gs.enemyNode - 6 && list.size() > 2)
            movingVectorY = -1;
        if (Integer.parseInt(list.get(1)) == gs.enemyNode - 1 && list.size() > 2)
            movingVectorX = -1;
    }

Problem jest z dwoma ostatnimi warunkami. Pierwsze dwa działają jak należy, a dwa ostatnie nie działają tj. nie zbliżają potwora do gracza. Dlaczego tak jest? Bardzo prosze o pomoc!

0

Odświeżam, usunąłem część kodu niepotrzebną. Chodzi o 2 ostatnie warunki w metodzie showAttention(). Dla lepszegfoi zobrazowania sytuacji może podlinkuję apkę co by można było zobaczyć na własnen oczy? Stawiam wirtualną flaszkę jak ktoś mi pomoże ;)

Zauważyłem, że problem nie tkwi w warunku, tylko samym przypisywaniu wartości movingVectorX = -1; ale dlaczego tak jest. Będę wdzięczny za jakiekolwiek sugestie

1 użytkowników online, w tym zalogowanych: 0, gości: 1