For..Each-Schleife in For..Each-Schleife ...? (Selber Type)
Übersicht

![]() |
TennisballBetreff: For..Each-Schleife in For..Each-Schleife ...? (Selber Type) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Ich habe, sagen wir, 500 Objekte des selben Types. Nun möchte ich für jedes prüfen, ob es mit einem der anderen 499 kollidiert ist. (Wie) geht das? (mir gehts nur um die Sache mit den Schleifen etc.) mfg, Tennisball |
||
DjDETE |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] ;type deklarieren
Type test Field test ;500 objekte erstellen for i=0 to 499 t.test=new test t\test=createsphere() next for t1.test=each type for t2.test=each type if t1\test=t2\test then nothing=0 next next Das Beispiel vergleicht nur die Werte Test und überprüft keine Kollision. Die Sache mit den Schleifen sollte aber klar sein. ![]() MfG DeTe Edit: Tut mir leid, mein (dummer) Fehler |
||
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden. |
- Zuletzt bearbeitet von DjDETE am Mo, Nov 02, 2009 22:14, insgesamt einmal bearbeitet
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Type blubb
Field eigenschaft% End Type Global b.blubb, b2.blubb For i= 1 To 500 b.blubb = New blubb b\eigenschaft = Rand(999) Next Repeat For b.blubb = Each blubb For b2.blubb = Each blubb If b <> b2 ;check for collision EndIf Next Next Until KeyHit(1) End L8er, PSY (edit) @DjDETE Zitat: for t1.type=each type
for t2.type=each type statt type muss es test lauten ![]() edit2 ok hast es vor mir gemerkt lol ![]() |
||
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zu den beiden Vorpostern möchte ich anmerken, dass bei den genannten Codes die Kollision zwischen 2 Objekten doppelt geprüft wird, was vollkommen unnötig ist und bei 500 Objekten sogar ein ernsthaftes Performanceproblem darstellen kann (500 * 500 = 250.000 Iterationen).
Ich würde den Index manuell verschieben oder gleich Arrays mit Index benutzen, die es noch performanter schaffen. |
||
- Zuletzt bearbeitet von E. Urbach am Mo, Nov 02, 2009 22:22, insgesamt einmal bearbeitet
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
bei dem Beispiel wird jeder mit jedem 1x geprüft, aber nicht mit sich selbst
Code: [AUSKLAPPEN] For a1.test = Each test
a2.test = After a1 While a2 <> Null If a1\test = a2\test Then ; <=> anpassen ;mach was ; End If a2 = After a2 Wend Next |
||
[BB2D | BB3D | BB+]
|
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
also ideal ist wenn die innere Schleife aus While und After gebaut wird und nur immer bis zu dem objekt selbst kontrolliert und dann abbricht
Dann machst du aus: Code: [AUSKLAPPEN] 1 2 3
1 X X X 2 X X X 3 X X X nur noch Code: [AUSKLAPPEN] 1 2 3
1 X 2 X X 3 X X X Wenn du dann noch vor dem Objekt selbst abrichst Code: [AUSKLAPPEN] 1 2 3
1 2 X 3 X X Für ein "dass es überhaupt funktioniert" sind allerdings die oberen schleifen ausreichend EDIT: Rallimen mach es genau anders herum: Code: [AUSKLAPPEN] 1 2 3
1 X X 2 X 3 |
||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah danke, funktioniert prima. ![]() Danke! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group