Types in Types finden....
Übersicht

![]() |
EPSBetreff: Types in Types finden.... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, ich hab ein kleines Problem bei meinen Types...
also ich hab zwei verschachtelte Type Strukturen: Type IButton Field X,Y End Type Type IconLine Field X,Y Field IBut.IButton End Type IBut ist also ein Element in IconLine. Davor soll es mehrere geben. Jedes Element IconLine soll also gleichzeitig mehrere Elemente des Typs IButton enthalten können. Das anlegen geht dann in etwa so: ICL.IconLine = New IconLine ICL\IBut = New IButton . . . ICL\IBut = New IButton . . . usw. Nun zur Frage. Wie muß eine Suchschleife konstruiert sein die mir alle IButton eines Elemementes IconLine durchsucht? Ich hatte aussen folgende Schleife gemacht: For ICL.Iconline = Each IconLine und die innere Schleife dann mittels: For ICL\IBut = Each IButton ...aber das funktioniert so nicht. Komischerweise werden alle IButton schon im ersten Element IconLine gefunden und nicht in dem in welchem sie sich befinden. Das ganze ist etwas verstrickt und ich find mich bald gar nicht mehr raus ![]() Also im Forum fragen...vielen Dank schon mal |
||
CodeMaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es funktioniert immer nur ein Type-Eintrag pro Type-Eintrag ![]() Du hast also pro IconLine-Element jeweils nur ein IButton-Element. Die einzige Möglichkeit wäre, mehrere IButton-Elemente in die IconLine-Liste unter verschiedenen Namen zu definieren, oder per BlitzArray. Was anderes geht meines Wissens nach nicht. |
||
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.
Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102 |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier mal eine Lösung:
Code: [AUSKLAPPEN] Const TYPE_ENTRY = 0 Const TYPE_INSTANCE = 1 SeedRnd MilliSecs() Global Cnt_Instance Type Frucht Field Typ; 0=Entry 1=Instance ; Könnte man auch in Name oder Gewicht verstecken Field Name$ Field Gewicht End Type Type Baum Field Name$ Field Frucht.Frucht End Type ;Bäume erzeugen abaum.baum = CreateBaum("Apfelbaum", "Apfel") bbaum.baum = CreateBaum("Birnbaum", "Birne") kbaum.baum = CreateBaum("Kirschbaum", "Kirsche") pbaum.baum = CreateBaum("Pflaumenbaum", "Pflaume") ;Früchte erzeugen For b.baum = Each baum Anzahl = Rand(2,7) For i = 1 To Anzahl CreateFrucht(b,Rand(50,250)) Next Next ;Früchte je Baum ausgeben For b.baum = Each baum Print b\name$ f.frucht = After b\frucht While f <> Null If f\Typ = TYPE_INSTANCE Then Exit Print " " + f\Name$ + " " + f\Gewicht + "g" f.frucht = After f.frucht Wend Next WaitKey() ;Ende Hauptprogramm Function CreateBaum.Baum(Baumname$, Fruchtname$) Local b.Baum b = New Baum b\Name$ = Baumname$ b\Frucht = CreateFruchtInstance(Fruchtname$) Return b End Function Function CreateFruchtInstance.Frucht(Fruchtname$) Local f.Frucht f = New Frucht f\typ = TYPE_INSTANCE f\Name$ = Fruchtname$ Return f End Function Function CreateFrucht.Frucht(Baum.Baum, Gewicht) Local f.Frucht Local h.Frucht If baum.baum = Null Return Null h = baum\frucht f = New Frucht f\typ = TYPE_ENTRY f\Name$ = h\name$ f\Gewicht = Gewicht Insert f After baum\frucht Return f End Function Prinzip: Es wird für jeden "Ober-Type" ein eigener Informations-Eintrag im "Unter-Type" angelegt, der entsprechend verlinkt wird. Alle neuen Objekte werden dann direkt hinter dem entsprechenden InfoEintrag erzeugt. Über diesen Infoeintrag werden dann die einzelnen Instanzen direkt abgefragt. Die manuelle Abarbeitung der Type-Einträge ist bei deaktiviertem Debugger übrigens nicht viel langsamer als eine For-Each-Schleife: Code: [AUSKLAPPEN] Type blup Field affe End Type For i = 1 To 1000000 f.blup = New blup Next Print "Zeitmessung Manuell" f.blup = First blup oldtime = MilliSecs() While f <> Null If f\Affe = 5 Then Exit f.blup = After f.blup Wend Print MilliSecs() - oldtime Print "Zeitmessung For-Each" oldtime = MilliSecs() For f.blup = Each blup Next Print MilliSecs() - oldtime WaitKey() |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank BIG BUG für den Vorschlag.
Ich hab es jetzt (wie CodeMaster vorgeschlagen hat) mit Hilfe eines BlitzArrays realisiert. Ist einfacher für mich da durchzusteigen. |
||
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Da diese Schleifendurchgänge wirklich nich sehr viel Zeit verschlingen hilft meistens ( natürlich nicht beim bis zum letzten FPS optimierten Spiel... ) auch ein:
Code: [AUSKLAPPEN] Local tIButton.IButton For ICL.Iconline = Each IconLine For tIButton = Each IButton If tIButton = ICL\IBut then ; Hier dein Code rein EndIf Next Next Das ganze liegt daran, dass Blitz leider nur pro Listen-Typ auch wirklich nur EINE Liste verwaltet und alle Instanzen in dieser Liste zu finden sind :S XY.Z = New Z fügt also nur ein neues Element zur globalen Liste Z, es erstellt nicht eine neue Liste vom Typ Z in der Variable XY ![]() Ist scheiße, aber nicht zu ändern. walski |
||
buh! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group