Editorproblematik bei CheckQuad3D in Schleife [Gelöst]
Übersicht

n-HalbleiterBetreff: Editorproblematik bei CheckQuad3D in Schleife [Gelöst] |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey Leute!
Ich hab' hier offenbar irgendwo einen Fehler eingebaut. Ich suche ihn jetzt seit grob geschätzten 4 Stunden, komme allerdings nicht dahinter, wo das Problem liegen soll. Ich hoffe hier kann mir jemand helfen. Code: [AUSKLAPPEN] For CY=0 To LVLHEIGHT+1
For CX=0 To LVLWIDTH+1 AX=-(LVLWIDTH+1)/2*TILESIZE+TILESIZE/2+CX*TILESIZE AY=+(LVLWIDTH+1)/2*TILESIZE-TILESIZE/2-CY*TILESIZE CheckQuad3D(AX-TILESIZE/2,AY+TILESIZE/2,AX+TILESIZE/2,AY+TILESIZE/2,AX+TILESIZE/2,AY-TILESIZE/2,AX-TILESIZE/2,AY-TILESIZE/2,GLOW) If MouseHit3D Select C2 Case 8;Shooter If CX=0 Or CY=0 Or CX=LVLWIDTH+1 Or CY=LVLHEIGHT+1 If Int(Mid(arg,1,1))=1 OBJECTS(Int(Mid(arg,2,1)),Int(Mid(arg,3,1)),1)=CX*$10000+CY arg="" EndIf OBJECTS(CX,CY,0)=8 EndIf End Select MouseHit3D=0 EndIf Next Next Im Array OBJECTS(X,Y,D) werden die Elementdaten gespeichert, die Globalen "LVLWIDTH", "LVLHEIGHT" und "TILESIZE" sind die Grobdaten des Levels. "CX" und "CY" sind meine Zählvariablen und "AX" bzw. "AY" die Variablen, die die aktuelle Position des Tiles auf dem Feld darstellen (für CheckQuad3D). Diese Schleife (ich habe die scheinbar funktionierenden Teile herausgekürzt) stellt die Routine für das Positionieren von Elementen in meinem Editor für mein Spiel. Die Schleife geht "über den normalen Bereich" hinaus (d.h. sie macht eben zwei Reihen und Spalten mehr, in denen die "Shooter" platziert werden). In diesem Bereich außerhalb des normalen Levels gibt es nun folgende Problematik: Wenn ich am rechten Rand einen "Shooter" platzieren will, setzt er am linken Rand auch einen, allerdings eine Reihe nach unten versetzt. Und umgekehrt. Zusätzlich kann ich im zweiten Feld von oben links und im zweiten Feld von unten rechts keine Elemente platzieren. Innerhalb des Feldes und am oberen und unteren Rand funktioniert alles so, wie es soll. ![]() EDIT: Da ich zur Zeit auf einer mehrtägigen LAN bin, habe ich noch ein paar der anderen Teilnehmer dazu überredet, dass ich das mal bei ihnen ausprobieren kann; mit dem selben Ergebnis (s.o., an bestimmten Stellen setzt er zwei anstelle von einem "Shooter", an zwei Stellen kann ich überhaupt keine setzen, obwohl es in der Theorie her funktionieren müsste, denke ich. Ich schließe daraus, dass es ein Fehler ist, der irgendwo in einem der Codeteile liegt. Nur wo ist die Frage... Hat wer 'ne Idee? EDIT 2: Scheinbar ist mein Text von oben so geschrieben, dass er zu Missverständnissen führen kann; ich habe ihn ein wenig umformuliert, um dem entgegenzuwirken. ![]() |
||
- Zuletzt bearbeitet von n-Halbleiter am Do, Apr 16, 2009 22:21, insgesamt 2-mal bearbeitet
TerrorMachine |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Meiner Ansicht nach musst du bei den beiden Schleifen LVLHEIGHT(bzw. DEPTH) - 1 und nicht + 1 rechnen.
Da du ja schon bei 0 anfängst und nicht bei 1. In dieser Konstellation müsstest du bei 2 anfangen (Was aber mir dem Array dann nix bringen würde). |
||
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich fange bewusst bei 0 an bzw. arbeite mich bis zu lvlwidth+1 und lvlheight+1 vor. Ich habe nämlich das Feld, in dem alle anderen Elemente gespeichert werden. An den Rändern, also die Werte mit CX oder CY gleich 0 bzw. gleich lvlwidth+1 und lvlheight+1, werden die "Shooter" gespeichert. Wenn ich jetzt versuche, einen am rechten Rand zu platzieren, dann setzt er mir links auch nochmal einen (s.o.). | ||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie groß hast du denn OBJECTS dimensioniert? Das ist erstmal das wichtigste für uns zu wissen. Das würde vor allem das ''rechts setzen, links erschienen'' erkären.
Generell würde ich auch die Nutzung in dieser Form von CheckQuad3D abraten. Macht die Abfrage am besten über den Weg, wo du deine Map auch einzeichnest. Denn dann kannst du dir sicher sein, dass nicht durcheinander gerät. Und was sagt denn der Debugger zu deinen Fehler? |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OBJECTS ist auf LVLWIDTH+2,LVLHEIGHT+2,2 (<- die dritte Dmension aufgrund von anderen Daten) dimensioniert, also so, dass es mit der Schleife passt. Ich hatte diese Methode eigentlich bewusst gewählt, da ich meine Funktion DrawLevel, also die, mit der das Level gezeichnet wird, nicht mit "Editor-spezifischem" Code füllen wollte. Was sagt mein Debugger? Gute Frage, nächste Frage... Ich hab' mal nachgeschaut, er sagt an sich nichts ungewöhnliches, nur das, was ich auch sehe: wenn ich rechts was hinsetze, klatscht er's mir links auch nochmal hin. Warum war mir ein Rätsel.
Hat sich allerdings auch eben erledigt. Ich bin durch Zufall eben beim Duschen auf die Lösung gekommen ![]() Danke für die Hilfe! |
||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
TerrorMachine |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich kenn ja deinen vorherigen Code nicht, aber wenn du das so wie oben schreibst, dann kommt doch sowas bei raus:
Eingestellte Levelgröße: 3 (Beispiel) Schleifendurchlaufzähler: 0 1 2 3 4 (da größe + 1) Das sind dann 5 und nicht 3 Durchläufe. Ist mein Gedankengang so falsch? |
||
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Terrormachine, genau das ist doch geplant. LVLWIDTH und LVLHEIGHT sind ja die Größe des 'effektiv nutzbaren Bereiches', also des Bereiches, in dem der eine Teil der Elemente gespeichert wird. Im Randbereich wird der andere Teil gespeichert. Außerdem habe ich das Problem ja schon gelöst. ^^ | ||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group