Each Type in Each-Type / Wo liegt der Fehler?
Übersicht

![]() |
jonnyboyBetreff: Each Type in Each-Type / Wo liegt der Fehler? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute.
Also zuerst: Ich war mir nicht sicher, ob ich diesen Thread in der Beginner's Corner oder in der allgemeinen Abteilung zu schreiben... Aber da ich meine eigene Erklärung für das Problem nicht glaube, habe ich es hier erstellt. Also als erstes: Ist es möglich, Each-Type-Schleifen IN einer Each-Type-Schleife abzufragen? Wenn Nein, dann hat sich mein Problem hier schon erledigt, dann muss ich mir etwas anderes einfallen lassen... Wenn ja, dann verstehe ich nicht, wo das Problem ist. Ich will wie gesagt Each type in Each Type abfragen. Kurz zu meinem Thema: Ich mache ein 2D-Strategiespiel machen und bin gerade bei den Wegen. Die sollen halt verknüpft werden. Jeder Weg soll mit allen anderen Wegen verglichen werden, dann werden je nach Richtung Zahlen zusammengerechnet und aus denen ergibt sich dann der Wegtile. ![]() Wenn ich die 2te Each-Type-schleife auskommentiere, geht alles perfekt. Sobald ich aber NUR DIE SCHLEIFE,nicht den Inhalt, wieder "Re-kommentiere", dann gibts schon einen "Memory Access Violation"-Fehler. Hier noch den Codeausschnitt (Und zur Info, MAV-Fehler kommen ja oft, wenn Bildernicht vorhanden zB. Aber erstens geht das ganze ja ohne die 2te Each-Schleife, außerdem bin ich mir sicher, das es das Bild gibt. Und es gibt wie gesagt NUR die Fehlermeldung, wenn diese simple Schleife mit imProgramm ist...???) ![]() EDIT: Noch eine Info.. ![]() Funktion: Code: [AUSKLAPPEN] Function wegezeigen() ;Die Wege werden gezeichnet
For gebaudezeig.gebaudeset = Each gebaudeset ;Gebaude, in diesem fall Wege werden durchlaufen If gebaudezeig\typ = 0 Then ;Wenn Gebaude = Weg, dann: xkoo = gebaudezeig\xpos ;XPOS und YPOS des Weges ykoo = gebaudezeig\ypos rechenoperation = 0 ;Rechenvariable fuer Wegtile For gebaudezeig.gebaudeset = Each gebaudeset ;Jedes andere Wegtile vergleichen If gebaudezeig\typ = 0 Then ; If gebaudezeig\xpos - 60 = xkoo Then ;Wenn Wegtile2 XPOS - 60 Pixel vom ersten Wegtile ; rechenoperation = rechenoperation + 10 ;Dann Rechenoperator + 10, d.h. berührt links einen anderen Weg ; End If End If Next DrawImage(weg(rechenoperation),xkoo - bufferfieldx,ykoo - bufferfieldy) ;Weg zeichnen End If Next End Function |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst die Variable in der inneren Schleife anders benennen, dann sollte es gehen. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
jonnyboy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ahja, danke, jetzt geht es... naja, da hab ich wohl types immernochnicht so richtig verstanden... ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Name der Variablew in der Schleife ist ja nur ein Platzhalter. Es werden bei der Schleife immer alle Einheiten eines Types durchlaufen, egal wie der Bezeichner heisst. Wenn Du jedoch 2mal denselben Bezeichner nimmst verwirrst Du den Compiler damit, der kann damit nix anfangen.
Das ist genau dasselbe weshalb du auch nicht 2mal denselben variablennamen bei for next nehmen solltest wenn Du verschachtelst. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
jonnyboy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm.. wenn man das so sieht, dann verstehe ich das schon und ich werde es ab jetzt auch immer anwenden... Nur ich meine, dann ist es ja so das das erste, das
"gebaudezeig2" das das praktisch der Name der Schleife wäre? Aber... also ich habe das doch so verstanden, das gebaudezeig praktisch ein Container ist. Darin befinden sich dann "Unterfächer", wie xPos, yPos und Typ zum Beispiel. Aber ich kann dochnicht einfach den Container umbenennen? Oder wird das durch das gebaudeset gemacht? Aber das ist doch nur der Typebezeichner sozusagen???? ![]() Man, Das ist schon nicht so leicht.. Sorry, das ich jetzt hier so diese Basisfragen stelle... Najo. Noch eine Frage übrigens.. gehen auch 3 Type-Schleifen? Nach dem Motto: For bla\blubb = Each blo For bla2\blubb = Each blo For bla3\blubb = Each blo Next Next Next Ich will jetzt hier keinen Codeschnipsel oder sowass zeigen, weil ich die Schleife eh an der falschen Stelle gesetzt habe... Aber ich habe wie gesagt jetzt 3 Verschachtelungen und wenn ich dahin komme bei meine Spiel hängt sich das Programm auf und mein gesamter PC dazu...^^ Danke für eure Hilfe |
||
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie BladeRunner schrieb, ist gebaudezeig ebenso wie gebaudezeig2 nur ein Platzhalter innerhalb deiner Schleife. Da deine Type-Einträge untereinander praktisch alle gleich sind, musst du einen als Vorgabe angeben, nach dessen Muster die anderen alle behandelt werden.
Das hieße also in Pseudocode: Code: [AUSKLAPPEN] For gebaudezeig.gebaudeset = Each gebaudeset; Für alle Type-Einträge wie gebaudezeig For gebaudezeig2.gebaudeset = Each gebaudeset; Für alle Type-Einträge wie gebaudezeig2 If gebaudezeig <> gebaudezeig2; ausschließende Abfrage (Befehle) EndIf Next Next Mit Code: [AUSKLAPPEN] If gebaudezeig <> gebaudezeig2 verhinderst du, dass die beiden Schleifen den jeweils gleichen Eintrag miteinander vergleichen. Da es sich ja um ein und denselben Eintrag handelt, wären logischerweise immer die Bedingungen erfüllt. Rallimen hatte dazu irgendwann in letzter Zeit noch einen besseren Code gezeigt, einfach mal nach ihm suchen (das mach' ich jetzt nicht ![]() Zu deiner zweiten Frage: Ja, du kannst drei und mehr Schleifen innerhalb verschachteln. Mit jeder neuen inneren Schleife erhöht sich aber logischerweise die Anzahl der Durchläufe. Wenn zum Beispiel Schleife 1 10, Schleife 2 10 und Schleife 3 auch 10 Durchläufe hätte, wären es insgesamt 10*10*10 = 1000 Durchläufe. Darum sollte man mit zuvielen Schleifen vorsichtig sein. Ich würde aus meiner Erfahrung heraus sogar behaupten, dass man eigentlich nie mehr als zwei verschachtelte For-Each-Schleifen (des gleichen Type-Containers natürlich) benötigt - und ich nutze so gut wie immer Types ![]() MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
![]() |
jonnyboy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die Antowtr, garet =)
Also die zweite Frage war ehrlich gesagt auch nichtnur für gleiche types gestellt.. sondern wie ich mir schon gedacht habe, wollte ich Fragen ob das nicht zuviel für den Computer wird bzw. ob der das irgendwann eifnach nichtmehr hinbekommt keine Ahnung ![]() Ich willnämlich xstep alle durchläufe, ystep alle durchläufe (also x und y positionen alle durchgehen) und dann nochmal alle gebaude durchgehen.. naja ist ja jetzt auch egal.. nochmals danke, grüße und Peace ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group