Hallo allerseits,
Ich entwickle grad einen Map Editor für mein Spiel. Dabei soll es Wegpunkte geben die der KI als Weghilfe dienen soll. Ich zeichne die Map mit Andorra 2D und die Punkte darauf mit der Andorra 2D Canvas.
Hier ist meine Zeichen Prozedur in der die Wegpunkte und die Verbindungen gezeichnet werden sollen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure DrawPoints(); var i, j: integer; begin with Form1.AdDraw.Canvas do begin Pen.Color := NewColor; Brush.Style := absolid; for i:= 0 To Length(MapInfo)-1 do begin for j:= 0 To Length(MapInfo[i].ConnectedTo)-1 do Line(MapInfo[i].X + 174 + 4, MapInfo[i].Y + 14, MapInfo[MapInfo[i].ConnectedTo[j]].X + 174 + 4, MapInfo[MapInfo[i].ConnectedTo[j]].Y + 14); if MapInfo[i].PlayerPoint <> 0 then Textout(MapInfo[i].X + 174 - 1, MapInfo[i].Y + 14 - 8, IntToStr(MapInfo[i].PlayerPoint)) else Rectangle(MapInfo[i].X + 174 + 2, MapInfo[i].Y + 14 - 2, MapInfo[i].X + 174 + 6, MapInfo[i].Y + 14 + 2); end;
Pen.Color := BlackColor; Brush.Style := abclear; end; end; |
(Ignoriert die Additionen am Ende (+174, u.a.), die sind lediglich zur Korrektur da, weil die Map nicht in der oberen linken Ecke liegt.)
Delphi-Quelltext
1: 2: 3: 4: 5:
| type TMapPoint = record X, Y: Word; PlayerPoint: Byte; ConnectedTo: array of Byte; end; |
Das ConnectedTo speichert den Index der Wegpunkte mit denen dieser Punkt verbunden ist. Wenn MapPoint A auf MapPoint B zeigt, zeigt MapPoint B auch automatisch auf MapPoint A. Somit wird die Linie doppelt gezeichnet! Dies ist zwar nicht wichtig für den Anwender allerdings für die letztendliche Benutzung der Map.
Auf jeden Fall wenn ich einen der Mappoint (B) bewege, passiert folgendes:
Eine Linie wird von Punkt A zu Punkt B gezeichnet und
Eine Linie wird von Punkt A zu Punkt Bs ursprünglicher Position gezeichnet.
Wie kann ich dieses Problem beheben?
(Da Ich ähnliche Probleme in einer anderen Anwendung habe, schliesse ich daraus das die Andorra Canvas irgendwie die Informationen des vorherigen Bildes mitbenutzt um den neuen Frame zu zeichen.)
Danke im voraus.
"Wir können nicht fliehen!" "Wieso nicht?" "Sie haben mir die Schnürsenkel zusammengebunden!" "Die Schweine."