Verschachtelte Types ansprechen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

s_m_w

Betreff: Verschachtelte Types ansprechen

BeitragSo, Sep 07, 2008 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Sep 07, 2008 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile )

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

s_m_w

BeitragSo, Sep 07, 2008 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Sep 07, 2008 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
http://de.wikibooks.org/wiki/B...rial#Types

s_m_w

BeitragSo, Sep 07, 2008 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Sep 07, 2008 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Lesen hilft:

Zitat:
a=FIRST alien
a=AFTER a


Das stand da, hättest du es gelesen, dann wärst du jetzt schon fertig Smile

s_m_w

BeitragSo, Sep 07, 2008 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Sep 07, 2008 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Du brauchst keine Schleife.

s_m_w

BeitragSo, Sep 07, 2008 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Sep 07, 2008 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

Eingeproggt

BeitragSo, Sep 07, 2008 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Then ist nicht zwingend notwendig.

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

BeitragSo, Sep 07, 2008 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Sep 07, 2008 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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 und Handle und verteilt jedem Typeeintrag eine ID von welches aus ein anderes Type drauf zugrifen kann.

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

BeitragSo, Sep 07, 2008 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Eingeproggt hat Folgendes geschrieben:
Then ist nicht zwingend notwendig.

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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group