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!