Finde meinen Fehler nicht
Übersicht

![]() |
SmokieBetreff: Finde meinen Fehler nicht |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich habe einen doofen Fehler in meinem Code und sehe in nicht. Der Syntax is richtig nur im Context da is ein Fehler und ich seh in einfach net. Ich habe 2 Bank, inder ich die x und y Positon eines Knotens speichere. (Knoten zum Pathfinden). Ich speicher in einer Variable (Numn) an welcher Stelle die Koordinaten aufhören. Also ich brauche nur 10 byte der 2000 byte großen Bank dann ist numn 5 (später dann 5 * 2). Damit ich net unnötig speicher verschwende überschreibe ich die Knoden für einen Pfad mit den dahinterliegenden. Bei dem Vorgang geht irgendwas schief und die Figur läuft zur falschen Stelle. Ich hoffe ihr findet meinen Fehler, da wie so oft ich meinen eigenen Fehler net finde. hier der Code. Mit dem Type für mein Objekt Code: [AUSKLAPPEN] Type einheit Field id Field typ Field x,y Field leben Field besitzer Field xaim,yaim Field move Field chosen Field node_start ; hier wird gespeichert an welcher Stelle er mit dem lesen der Bank beginnen soll Field node_pos ; Aktuelle Leseposition Field node_end ; Leseende End Type Der Teil an dem die X-Y Koordinate in die Bank geschrieben wird. Code: [AUSKLAPPEN] einheit\node_pos = numn * 2 DebugLog "Numn " + numn * 2 einheit\node_start = numn * 2 While tempnode\parent<>Null PokeShort x_bank,numn * 2,tempnode\x PokeShort y_bank,numn * 2,tempnode\y tempnode=tempnode\parent Numn = Numn + 1 Wend PokeShort x_bank,numn * 2,tempnode\x PokeShort y_bank,numn * 2,tempnode\y einheit\node_end = numn * 2 Numn = Numn + 1 Numn ist global. Hier der Code zum bewegen des Objektes. Code: [AUSKLAPPEN] If RectsOverlap(e\x-1,e\y-1,5,5,e\xaim,e\yaim,1,1) Then If e\node_pos + 2 < e\node_end Then e\node_pos = e\node_pos + 2 e\xaim = PeekShort (x_bank, e\node_pos) * 16 e\yaim = PeekShort (y_bank, e\node_pos) * 16 rect_x = e\xaim rect_y = e\yaim Else e\move = 0 EndIf EndIf Und jetzt die Funktion die den Speicher verwalten soll, sie wird jedes mal aufgerufen, wenn ein neuer Pfad berechnet wird. Code: [AUSKLAPPEN] Function bankverwalten(start,ende) ;start = e\node_start ende e\node_end div = (ende - start) For i = 0 To 2000 Step 2 If i => start And (2000 - div + i) < 2001 Then PokeShort x_bank,i,PeekShort(x_bank,i + div) PokeShort y_bank,i,PeekShort(y_bank,i + div) EndIf Next div = (ende - start) For e.einheit = Each einheit If e\node_start <> 0 And e\node_start => start / 2 Then DebugLog "pos: " + e\node_pos DebugLog "Div: " + div e\node_start = e\node_start - div e\node_pos = e\node_pos - div e\node_end = e\node_end - div DebugLog "pos: " + e\node_pos DebugLog "Xaim: " + e\xaim e\xaim = PeekShort (x_bank, e\node_pos) * 16 DebugLog "Xaim: " + e\xaim DebugLog "Xaim-after: " + PeekShort (x_bank, e\node_pos + 2) * 16 e\yaim = PeekShort (y_bank, e\node_pos) * 16 EndIf Next numn = numn - div / 2 End Function Ich schätze ma das der Fehler in der Funktion ist. Danke schonma im Vorraus. Grüße Smokie |
||
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer. Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bei beiden Seiten besteht der gleiche Fehler:
Du schreibst und liest die X und Y Position an die gleiche Position in der Bank, was natürlich nur falsche Resultate liefern kann, ausser sein Zielpunkt war an einer Position wo X und Y identisch waren. Damit es funktioniert musst du erst X schreiben und dann Y 2 Bytes weiter hinten in der bank. Konsequenz ist, dass du die Berechnung für die die Position in der Bank andern musst (aktuell ist die ebenfalls falsch), da du 2 Shorts schreibst ist natürlich jede Positionsangabe in der Bank auch 4 Byte lang, nicht 2. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Smokie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achso!! Ich wusste net, dass bei banken sozusagen an der selben Stelle im Speicher sind. Hab gedach du wurden aneinandergehängt oda so. Merkwürdigerweiße hat es aber funktioniert. Naja ich schau ma, dass ich es abändere.
Grüße SMokie |
||
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer. Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group