Ergebnis 1 bis 20 von 30

Thema: Brauche Hilfe: Pathfinding

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #21
    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
    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
    Oder kann man dies noch besser lösen?

    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:
    Code:
    O - - -
    - - - -
    - - - -
    - - - X
    So erstellt das Pathfinding zunächst folgende Bewegungsroute:
    Code:
    7 - - -
    6 - - -
    5 - - -
    4 3 2 1
    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.

    Ich muss leider nocheinmals um Hilfe bitten.

    Geändert von Cornix (05.06.2011 um 15:40 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •