Das ist eine wirklich gute Idee, nur muss ich einmal darüber nachdenken wie ich am besten aus dem Array von Nodes ein Array mit Richtungsangaben erstelle.
Wie wäre dieser Versuch, als erstes die alte Methode um die Move_Route zu erstellen, danach die neue mit Richtungsangaben in Form von Integern:
Code:def generate_move_route_old(start_node,end_node)
#the move_route is an array containing the locations of all nodes
move_route = [end_node]
predecessor = end_node.predecessor
loop do
if predecessor.nil?
break
end
move_route.insert(0,predecessor)
predecessor = predecessor.predecessor
if predecessor == start_node
break
end
end
return move_route
end
Oder kann man dies noch besser lösen?Code:def generate_move_route(start_node,end_node)
move_route = []
current_node = end_node
loop do
predecessor = current_node.predecessor
if predecessor.nil?
break
end
cx = current_node.x
cy = current_node.y
px = predecessor.x
py = predecessor.y
if cx < px
# move right
next_direction = LEFT#RIGHT
elsif cx > px
# move left
next_direction = RIGHT#LEFT
elsif cy < py
# move up
next_direction = UP#DOWN
else
# move down
next_direction = DOWN#UP
end
old_direction = move_route[move_route.size - 1]
if old_direction.nil?
move_route.insert(0,next_direction)
else
direction_sum = old_direction + next_direction
case direction_sum
when 4
# move down_left
move_route[move_route.size - 1] = DOWN_LEFT
when 5
# move down_right
move_route[move_route.size - 1] = DOWN_RIGHT
when 9
# move up_left
move_route[move_route.size - 1] = UP_LEFT
when 10
# move up_right
move_route[move_route.size - 1] = UP_RIGHT
else
move_route.insert(0,next_direction)
end
end
current_node = predecessor
end
return move_route
end
Edit: Ich habe bereits gemerkt, die Diagonalbewegungen werden noch nicht korrekt übersetzt. Ich weis auch warum, ich weis nur noch nicht wie ich es lösen soll.
Das Problem ist folgendes, soll sich meine Figur in folgendem Beispiel von O bis X bewegen:
So erstellt das Pathfinding zunächst folgende Bewegungsroute:Code:O - - -
- - - -
- - - -
- - - X
Bei der umwandlung von den nodes zu den Bewegungsrichtungen wird bei mir derzeit nur der Schritt von 3 über 4 zu 5 zu einer Diagonalbewegung umgewandelt da die Schritte 2 und 6 nicht aufeinanderfolgen.Code:7 - - -
6 - - -
5 - - -
4 3 2 1
Ich muss leider nocheinmals um Hilfe bitten.