Type Problem
Übersicht

![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja die Objekte die man mit den Types geschaffen hat sind sozusagen schon global. Aber man muss ja ein Handle das auf ein Objekt verweist haben um ein Objekt zu verwalten (ändern usw.).
Nehmen wir an man macht viele Schüsse. Dann könnte man das Handle immer auf den VOR-Letzten aller Schüsse setzen. Und dieses als Global definieren: Code: [AUSKLAPPEN] Type schuss
Field x,y End Type Global vorletzter.schuss ;Hauptschleife While not keyhit(1) Cls vorletzter.schuss = before last schuss Flip Wend End ;Funktionen Function test() vorletzter\x = vorletzter\x + 1 End Function Wenn vorletzter Global ist dann kann man ihn in Funktionen verwenden. Wenn er nicht Global ist dann kommt die Fehlermeldung das es ein Unbekannter Type oder Objekt ist bzw. das kein Objekt existiert. Eigentlich sind Types ganz einfach, wenn du ein String definierst sagt man ja auch text$ oder bei nem float halt komma_zahl# Bei den Types sagt man halt auch einfach variable.typename Wobei .typename nichts anderes ist als das $ vom string oder das # vom float. Man sagt einfach der Variable von welchem typ sie ist. Und das Problem wegen der Schleife: Die Schleife geht jedes Objekt durch. Benutzt aber immer nur die selbe Variable um das Objekt Handle zu speichern. Wenn du ein Objekt dann innerhalb der Schleife löscht ist das Objekt weg, das Handle gibt es aber immer noch. Und das Handle verweist auf die Speicherstelle des Objekts das es ja nun nicht mehr gibt. Deshalb kommt der Fehler das kein Objekt existiert. Die Lösung des Problems: Wenn der Delete Befehl nicht am Ende der Schleife steht, bzw. nach dem Delete Befehl nochmal auf das Handle zugegriffen wird, so muss man Prüfen ob das Objekt noch existiert. z.bsp: Code: [AUSKLAPPEN] For s.schuss = each schuss ... Delete s s = 0 ... If s <> 0 if s\x > 20 then .... Endif Next Am besten ist man setzt nach dem Löschen das Handle auch gleich wieder auf 0. Dann kann man mit if handle <> 0 prüfen ob es noch existiert. Wenn man es beim löschen nicht auf 0 stellt müsste man wohl mit if object.schuss(s) prüfen. |
||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Jol:
Das gleich hab ich auch geschrieben, nur ein bissl kürzer ![]() |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja ![]() Wollte eigentlich mehr für die Allgemeinheit zeigen wie einfach Types zu verwenden sind. Deshalb hab ich auch was über die Definierung von Types geschrieben. Arrays sind immer da gut wo man ca. weiss wieviele Objekte bzw. speicher man braucht. Oder wenn man dadurch ganz einfach auf den Richtigen Wert zugreifen kann ohne eine Schleife zu machen. (Hast du auch schon geschrieben, und ich bin da ganz deiner Meinung) Aber bei Sachen wo man eh immer ne Schleife machen muss find ich Types viel besser. Kein überflüssiger Speicher reserviert usw. und ich finde auch das sie sehr handlich sind. Was gutes ist auch das man in nem Type vom selben Type nochmal ein Handle speichern kann. Also: Type window Field parent.window ... End Type Wenn man so nen Fall hat wo man immer aufs übergeordnete Objekt oder so zugreifen will hat man es mit Types auch viel leichter finde ich. |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ach so, dann weiß ich natürlich was ein array ist. Bevor ich jetzt mit Types angefangen hatte, war mein ganzes Spiel ziemlich voll davon. Manchmal sind sie echt nützlich, aber für so Schüsse brauch ich was Variables, und da sind Types ideal. Naja, danke nochmal ^^ | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group