Verschachtelte Types ansprechen
Übersicht

![]() |
s_m_wBetreff: Verschachtelte Types ansprechen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Type ClosedList Field Node Field Parent End Type Type Vehicle Field X%,Y% Field CurrentNode% Field GotoNode% Field OpenList.OpenList Field ClosedList.ClosedList Field ForbiddenList.ForbiddenList End Type Function DoVehicles() For Vehicle.Vehicle = Each Vehicle ... NextNode = After First Vehicle\ClosedList Delete First Vehicle\ClosedList ... Next End Function Wie man hoffentlich erkennt möchte ich das 2. Element aus der ClosedList aus Vehicle\ClosedList ansprechen (Jedes Vehicle hat bzw soll seine eigene Liste haben), doch das scheint nicht so ganz zu gehen, geht das überhaupt mit Types? Wenn ja, wie? |
||
Sheep Happens |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne zu wissen was du genau erreichen willst, würde ich es so in etwa machen:
Code: [AUSKLAPPEN] ;[...]
Function DoVehicles() For Vehicle.Vehicle = Each Vehicle ... List.ClosedList=After Vehicle\ClosedList NextNode = List\Node Delete Before List ... Next End Function (Gibt zumindest keinen Syntax-Error ![]() mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Scheint zu gehen, danke!
edit: geirrt, es geht nicht, ich brauche ein After First, aber das gibt mir Syntax error und nur After gibt mir ein Objekt, dass nicht existiert |
||
Sheep Happens |
![]() |
sheldon |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://de.wikibooks.org/wiki/B...rial#Types | ||
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau die Seite habe ich konfrontiert, bevor ich diesen Post gemacht habe und geholfen hat es mir garnichts. Ein wenig mehr Hintergrundinformationen: Ich habe einen A* Pathfinder gebaut, der auch wunderbar funktioniert, nur möchte ich die Objekte, die ihn benutzen nun zu dem 2. Objekt der ClosedList bewegen (das Erste ist das, auf dem sie momentan stehen), ich habe es, wie man sieht, mit Types versucht, da jedes Objekt, was einen Pathfinder benötigt (Autos etc) eine eigene Open- und ClosedList braucht. Geht das ganze eleganter? Wenn nicht, wie spreche ich das 2. Element der Vehicle\ClosedList an? After First Vehicle\ClosedList scheint nicht so zu funktionieren. | ||
Sheep Happens |
![]() |
sheldon |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lesen hilft:
Zitat: a=FIRST alien
a=AFTER a Das stand da, hättest du es gelesen, dann wärst du jetzt schon fertig ![]() |
||
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Function DoVehicles()
For Vehicle.Vehicle = Each Vehicle ... NextNode=First Vehicle\ClosedList NextNode=After NextNode ... Next End Function Compiler hat Folgendes geschrieben: Expecting Next
Den Teil auskommentieren und es geht. |
||
Sheep Happens |
![]() |
sheldon |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du brauchst keine Schleife. | ||
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe ja nicht nur 1 Vehicle, hier mal die ganze Funktion:
Code: [AUSKLAPPEN] Function DoVehicles()
For Vehicle.Vehicle = Each Vehicle If Vehicle\CurrentNode = Vehicle\GotoNode Vehicle\GotoNode = RandomNode() FindPath(Vehicle,Vehicle\CurrentNode,Vehicle\GotoNode) EndIf NextNode=First Vehicle\ClosedList NextNode=After NextNode Vehicle\X = NodeX(NextNode) Vehicle\Y = NodeY(NextNode) Vehicle\CurrentNode = NextNode Next End Function |
||
Sheep Happens |
![]() |
sheldon |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: If Vehicle\CurrentNode = Vehicle\GotoNode then
Das so wie so, und jetzt hast du ja keine Schleife mehr? Allerdings klar, dass du mehrere hast bei einem Type ![]() |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Then![]() Aber du machst da was mit den Variablentypen falsch. Code: [AUSKLAPPEN] NextNode=First Vehicle\ClosedList
First Vehicle\ClosedList gibt dir eine Variable vom Typ ClosedList NextNode ist aber keine Variable vom Typ CLosed List sindern ne normale Integer. Machs doch so wie oben vorgeschlagen... temporäre Variable und NextNode=...\Node. Oder versteh ich da was falsch? |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh, ja, aber das vergessene then hat nicht viel mit meinem Problem zutun. Die Schleife hatte ich eben auch schon, ich habe nur den "..." Teil mit dem ausgelassenen Code ersetzt. Ich bin auf jedenfall jetzt mit meinem Latein am Ende. | ||
Sheep Happens |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hoffe ich habe dein Problem richtig verstanden... Wenn ja, dann kann ich dir 3 Möglichkeiten nennen:
1.) Wenn die Liste nicht unbekannt groß ist, kann man mit Blitzarrays arbeiten. Das wäre auf jeden Fall die einfachste Möglichkeit, vielleicht sogar die schnellste. 2.) Man arbeiten mit Object ![]() ![]() 3.) Die dritte Methode habe ich auch in meinem Physix (mit auf der Draw3D) benutzt. Jedes Type kann dann über Parameterangabe oder eigenem Eintrag auf bestimmte Werte eines anderen Types zugreifen. Code: [AUSKLAPPEN] Type KP
Field IH% ;ImageHandle Field XP# ;X-Position Field YP# ;Y-Position End Type Type VK Field K1.KP ;KP->1 Field K2.KP ;KP->2 Field IH% ;ImageHandle End Type Function NewKP.KP(FPhyxIH%,FPhyxXP#,FPhyxYP#) IPhyxKP.KP=New KP IPhyxKP\IH=FPhyxIH IPhyxKP\XP=FPhyxXP IPhyxKP\YP=FPhyxYP Return IPhyxKP End Function Function NewVK.VK(FPhyxIH%,FPhyxK1.KP,FPhyxK2.KP) IPhyxVK.VK=New VK IPhyxVK\K1=FPhyxK1 IPhyxVK\K2=FPhyxK2 IPhyxVK\IH=FPhyxIH Return IPhyxVK End Function zugegriffen/erstellt wird dann Code: [AUSKLAPPEN] Local K1.KP=NewKP(Image1,-250,+350)
Local K2.KP=NewKP(Image2,-150,+350) Local K3.KP=NewKP(Image3,-150,+250) NewVK(ImageV1,K1,K2) NewVK(ImageV2,K2,K3) So eine Verkettung geht ''unebdlich'' lange. Man muß lediglich dann immer mehrere \ schreiben. Code: [AUSKLAPPEN] For IPhyxVK.VK=Each VK
IPhyxVK\K1\XP Next Das wäre dann der Wert XP (X-Position) aus KP (Wert K1) welcher aus VK verlinkt kommt. Schlecht zu beschreiben. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eingeproggt hat Folgendes geschrieben: Then
![]() Aber du machst da was mit den Variablentypen falsch. Code: [AUSKLAPPEN] NextNode=First Vehicle\ClosedList
First Vehicle\ClosedList gibt dir eine Variable vom Typ ClosedList NextNode ist aber keine Variable vom Typ CLosed List sindern ne normale Integer. Machs doch so wie oben vorgeschlagen... temporäre Variable und NextNode=...\Node. Oder versteh ich da was falsch? Dann müsste NextNode.ClosedList = First Vehicle\ClosedList gehen, richtig? Ich bekomme da jedoch den Error "Expecting Next" und den Zeiger hinter Vehicle :/ Code: [AUSKLAPPEN] FirstNode.ClosedList=First Vehicle\ClosedList
AfterNode.ClosedList=After FirstNode hectic, danke für deinen Post, aber die eigentliche Verlinkung ist nicht das Problem (denke ich), sondern der Zugriff auf das erste bzw 2. Objekt des Types, der verlinkt ist |
||
Sheep Happens |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group