Waypoints die verbunden sind?
Übersicht

![]() |
M0rgensternBetreff: Waypoints die verbunden sind? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute.
Ich glaube, dass die Frage jetzt sau dämlich ist, aber ich hab schon die halbe Nacht drüber gegrübelt und bin auf keine zufriedenstellende Lösung gekommen. Ich bin dabei, waypoints in meinen Mapeditor einzubauen. Jetzt will ich aber nicht, dass später einfach überprüft wird, welcher Waypoint näher liegt, sondern ich will "Straßen" zwischen den Waypoints haben. Also, wenn ich auf den einen Waypoint klicke, und dann auf einen anderen, dass diese verbunden werden. Das optisch darzustellen ist im Prinzip kein Problem. Aber: Wie speichere ich das, welcher Waypoint mit welchem verbunden ist? Ich hab mir überlegt, jedem Waypoint eine fortlaufende Nummer zu geben. Und dann die Nummer, mit dem ein Waypoint vernetzt ist auch in dem Waypoint zu speichern. Über Arrays wär das aber recht unübersichtlich und unschön. Gibts da vielleicht ne bessere Lösung? Würd mich echt übern paar Denkanstöße freuen. Lg, M0rgenstern |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kommt darauf an, ob du Verzweigungen benutzen möchtest oder nicht. Eine Lineare Reihe von Punkten lässt sich mit einem Array oder mit Types leicht verwirklichen. Mit Verzweigungen würden Types Sinn machen - Punkte und Verbindungen. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, sagen wir ich habe Waypoint 5.
Waypoint 5 hat eine Verbindung zu Waypoint 2 und Waypoint 4 und Waypoint 3. Waypoint 6 Wiederum hat eine Verbindung zu 3, 7 und 10. So dachte ich das. Das Problem ist, dass ich nicht weiß, inwieweit das effektiv umsetzbar ist, bzw wie ich es umsetzen soll. Hoffe, das ist jetzt verständlicher. Lg, M0rgenstern |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann brauchst du einen Type für die Punkte und einen Type für die Verbindungen. Punkt 5 besitzt 3 Verbindungen, die jeweils die passenden Punkte beinhalten.
Etwa: Code: [AUSKLAPPEN] Type TWayPoint
;Field nr ;Nummer / Name oder am besten handle zum unterscheiden falls nötig Field x, y End Type Type TWayConnection Field P1.TWayPoint Field P2.TWayPoint End Type |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
SpionAtomBetreff: Graph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was du realisieren möchtest, wie es scheint, ist ein Graph
Ich hab auch mal versucht sowas mit Blitz zu schreiben: https://www.blitzforum.de/foru...hp?t=22290 Ich kann dir empfehlen mal gezielt nach diesem Begriff zu suchen. Es ist ein komplexer Bereich in der Informatik. Aber auch einfachere Dinge, wie Wegsuche und sowat lassen sich damit gut lösen. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für eure Hilfe, das ganze funktioniert super so wie ichs mir vorgestellt habe.
Mir ist nur ein Problem aufgefallen. Ich hab die koordinaten an die Punkte mit: Code: [AUSKLAPPEN] Wegpunkt\Xpos = (XOFFSET-(XPos Mod TILESIZE)+Xi*TILESIZE)
Wegpunkt\YPos = (YOFFSET-(YPos Mod TILESIZE)+Yi*TILESIZE) übergeben. Jetzt hängt das alles "am Monitor", also nicht auf der Karte. Ich weiß aber auch nichtgenau, wie ich die Koordinaten errechne für die Wegpunkte. Mit (xi+xrtv) funktionierts auch nicht. Jemand vielleicht ne Idee? Wäre echt toll. Lg, m0rgenstern |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du berechnest offenbar, wo die Wegpunkte auf dem Bildschirm sind. Sie sollten aber unabhängig vom Bildausschnitt sein - also Entfernung vom Punkt 0,0. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, mir ist bewusst, was da schief läuft, aber nicht, wie ichs ändern kann.
Ich hab halt Scrolling drin und die map an sich wird immer mit map(xi+xrtv,yi+yrtv) angegeben, wobei xi undyi die Variablen der Forschleife sind und xrtv und yrtv die Verschiebung. Außerdem noch Xpos und YPos für die Mapposition. Lg, m0rgenstern |
||
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich würde das Problem als eine LinkedList angehen. Falls dir das nichts sagt, hier die grobe Idee: Definiere einen Type Waypoint, dieser hat eine ID (Grund dazu später), eine Koordinate X und eine Y, und dann den nächsten Waypoint in der Liste, also so: BlitzBasic: [AUSKLAPPEN] Type Waypoint Dann erstellst du deinen Waypoint, achte darauf, dass die ID immer unterschiedlich sind, also bei einem "new Waypoint" würde ich gucken, dass: BlitzBasic: [AUSKLAPPEN] lastWP.Waypoint=Last Waypoint Die Koordinaten des Waypoints kannst du natürlich beliebig setzen. Danach kommt das zusammenhängen, wie du das im Editor lösen willst ist eine andere Frage, rein technisch geht das einfach so, dass du das Succ.Waypoint Feld des vorherigen mit dem jetzigen füllst. BlitzBasic: [AUSKLAPPEN] neuerWP.Waypoint=New Waypoint Wenn du jetzt einen Waypoint-Pfad ablaufen willst, dann kannst du das einfach so machen, indem du deiner Succ-Liste folgst. In etwa so: BlitzBasic: [AUSKLAPPEN] If Starte() Das ist die Technik. Das kannst du so natürlich nicht speichern (also... du kannst wahrscheinlich schon versuchen die Handles des Succ-Feldes zu speichern, aber das ist relativ sinnlos). Von daher brauchst du die ID des Types. Beim Speichern würd ich dann so vorgehen: BlitzBasic: [AUSKLAPPEN] For WP.Waypoint=Each Waypoint Beim Laden musst du dann zuerst die TmpID füllen, damit du dann die Liste wieder zusammenhängen kannst. Also zuerst ganz normal Laden: BlitzBasic: [AUSKLAPPEN] While Not Eof() Nachher musst du dann die Liste vervollständigen, also einfach den Waypoint suche, der die gleiche ID hat wie die TmpID des jetzigen Waypoints. BlitzBasic: [AUSKLAPPEN] For WP.Waypoint=Each Waypoint Und das wärs glaub ich. Ich hoffe das Prinzip ist einigermassen verständlich. Falls nicht... wir sind ja schon in einem Thread. MfG, Darth |
||
Diese Signatur ist leer. |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ darth:
Ich schau mir deinen Code morgen mal genauer an. Das Waypoint System, das ich habe funktioniert eigentlich ganz gut. Das Problem ist halt, dass ich die Waypoints nicht richtig auf die Karte gesetzt bekomme. Also, dass ich nicht weiß wie ich die Koordinaten berechnen soll. Momentan siehts so aus: Code: [AUSKLAPPEN] If mousedown3d=1 And ((WErstZeit+WErstStart)<MilliSecs()) Then
If (Map(Xi+XRtv,Yi+YRtv,0) = 0) Then Map(Xi+XRtv,Yi+YRtv,0) = 1 WPNummer = WPNummer + 1 Wegpunkt.TWaypoint = New TWaypoint Wegpunkt\Nr = WPNummer Wegpunkt\Dead = 0 Wegpunkt\XPos = (Xi+XRtv) Wegpunkt\yPos = (Yi+YRtv) WPCSet = 2 WErstStart = MilliSecs() EndIf Ihr seht ja, wo ich die x und y Koordinaten übergebe. Aber das funktioniert so nicht. Ich muss das irgendwie in Relation zur Maus setzen etc, aber ich weiß nicht wie. Hier mal die Stellen in denen die Koordinaten der Map berechnet werden: Code: [AUSKLAPPEN] XPos = XPos+(KeyDown(205)-KeyDown(203))*2
YPos = YPos+(KeyDown(200)-KeyDown(208))*2 If XPos<0 Then XPos=0 If YPos<0 Then YPos=0 If XPos>XWALL Then XPos=XWALL If YPos>YWALL Then YPos=YWALL XRtv=Floor(XPos/(TILESIZE)) YRtv=Floor(YPos/(TILESIZE)) For Yi = 0 To YDRAWTILES For Xi = 0 To XDRAWTILES In den Forschleifen steht dann halt auch der Code von oben wo die Waypoints erstellt werden. Ich hoffe, dass ihr mir helfen könnt. Lg, m0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group