Entity-ID überprüfen?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Gast

Betreff: Entity-ID überprüfen?

BeitragSa, Dez 18, 2004 15:06
Antworten mit Zitat
Hi! Smile

Hier zur Veranschaulichung meines Problems zuerst ein simples Beispiel:
Code: [AUSKLAPPEN]

entity = createsphere(16)

Dabei wird in der variable "entity" ja die ID der erstellten Kugel gespeichert, über die man das Objekt dann per MoveEntity, ect.. beeinflussen kann.

Nun meine Frage: Gibt es eine Möglichkeit zu überprüfen, ob die ID, die in der Variable gespeichert, ist überhaupt noch zu einem gültigen objekt führt, oder ob es schon gelöscht wurde?

Wenn man versucht das Objekt anzusprechen, obwohl es nicht mehr existiert kommt es ja zum error...Das möchte ich verhindern, indem ich die ID vorher überprüfe.

Würde mich freuen, falls jemand eine Idee hätte! Idea
 

Edlothiol

BeitragSa, Dez 18, 2004 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn z.B. LoadMesh nicht klappt, gibt es als ID eine 0 zurück. Du musst eben prüfen, ob die Zahl <> 0 ist. Wenn du den Entity freigibst, solltest du die Variable auch noch auf 0 setzen. Eine andere Lösung gibts meines Wissens nicht.

eizdealer

BeitragSa, Dez 18, 2004 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, dieses Problem hat keine Lösung. Das ist leider in der internen Struktur von B3D so festgelegt. Die einzige Möglichkeit wäre, die Struktur zu hacken. Aber das hat bisher noch keiner geschafft Very Happy

Wenn du sauber codest, ist das aber in der Regel auch kein Problem.
Dazu gehört zum einen nach jeder Ladeanweisung eine Überprüfung, ob das Laden erfolgreich war, wie Edlothiol schon gesagt hat.
Zum anderen solltest du grundsätzlich nach jedem FreeXXX Befehl die Variable des Handles auf 0 setzen.
So kannst du vor jedem Befehlblock, vor dem du dir unsicher bist, ob das Entity noch existiert, eine einfache Überprüfung machen, ob die Variable ungleich 0 ist.
 

Gast

BeitragSo, Dez 19, 2004 12:01
Antworten mit Zitat
Ok, dann muss ich doch mit dem umständlichen Weg weiter machen.
Trotzdem thx für die Antworten, ich wollte nur sicher gehen, dass ich keine andere Möglichkeit übersehen habe Smile

Ich hätte eine etwas elegantere Lösung für meinen space-shooter brauchen können: hab da mehrere von der KI gesteuerte Raumschiffe, die sich gegenseitig bekämpfen. Ich hab das ganze mit einem Type gelöst, folglich hat jedes Schiff ein Field für das anzugreifende Ziel und es ist eben etwas umständlich, wenn jedes Schiff bei seiner Zerstörung erst noch bei jedem anderen nachfragen muss, ob es gerade Ziel war, um dann die Variable auf Null zu setzen Wink

Gruß,
Marwius
 

BIG BUG

BeitragSo, Dez 19, 2004 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei Types gibt es aber so eine Abfrage:

BlitzBasic: [AUSKLAPPEN]

Type gegner
Field name$
End Type

boese.gegner = New gegner
boese\name$ = \"Gargamel\"

Delete Each gegner

If boese.gegner <> Null Then Print boese\name$

WaitKey()


Wenn Du also das anzugreifende Ziel auf den Typeeintrag und nicht auf das Entity referenzierst, kannst Du mit "Null" die Existenz dieses Eintrags abfragen.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group