Object und Handle Erklärung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

mpreu

Betreff: Object und Handle Erklärung

BeitragDi, Aug 27, 2013 3:31
Antworten mit Zitat
Benutzer-Profile anzeigen
konnte nirgends wirklich was darüber finden...
was macht man damit genau?
ist das einfach nur ein handle-pointer auf ein object?(type)

also handle weist einen handle einem type zu und mit object greift man darauf direkt zu...

also auf das ganze object eben

DAK

BeitragDi, Aug 27, 2013 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Hilfedatei dazu ist eigentlich ganz gut. Schau die dir mal an.

Ansonsten: Wenn du ein Objekt von einem Type hast, also eine konkrete Instanz von einem Type, und später auf die einzeln zugreifen willst, statt durch die ganze Liste aller Objekte dieses Types zu gehen, kannst du dir mit Handle eine Referenz auf das Objekt anlegen, auf die du dann später mit Object zugreifen kannst.

Beispiel dafür: Auf dem Bildschirm hast du haufenweise Einheiten. Du kannst diese Einheiten einzeln anwählen, und der angewählten Einheit Befehle geben. Diese Befehle zählen dann nur für diese eine Einheit, gehen also alle anderen nix an.
Beim Anwählen machst du dann ungefähr sowas:
BlitzBasic: [AUSKLAPPEN]
Local selectedUnit = Handle(unit)

selectedUnit ist die Variable in der das Handle gespeichert wird, unit die Einheit, die ausgewählt wird und ein Objekt des Types TUnit.

Um die Einheit dann wieder zu kriegen, um ihr Befehle zu erteilen machst du dann sowas:
BlitzBasic: [AUSKLAPPEN]
unit.TUnit = Object.TUnit(selectedUnit)


Handle gibt ein Integer aus, und Object nimmt dieses Integer wieder an. Somit kannst du die zwischengespeicherte Variable genauso verwenden wie Integers, also z.B. als Funktionsrückgabewert oder um ihn in Arrays abzuspeichern oder so.
Gewinner der 6. und der 68. BlitzCodeCompo
 

mpreu

BeitragDi, Aug 27, 2013 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
ah alles klar, also schon im groben wie ich mir dachte...

count-doku

BeitragDi, Aug 27, 2013 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wobei, was ich da noch nie verstand, warum nicht gleich unit speichern?

Wenn ich t.Type=New Type mache, habe ich doch in t auch ein Integerhandle drin - wofür also nochmal ein Integer handle holen?
Ich kann doch auch in Functions einfach Types übergeben.

Xeres

Moderator

BeitragDi, Aug 27, 2013 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Wenn ich t.Type=New Type mache, habe ich doch in t auch ein Integerhandle drin
Nein, hast du nicht. Types sind keine Integer handles.
In der Sache hast du aber recht - statt mit Handle und Object herum zu wursteln, könnte man es gleich richtig machen. Ein Fall, wo man unbedingt ein Int braucht, um den in einen von mehreren Types zurück zu casten, ist mir noch nie unter gekommen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

count-doku

BeitragDi, Aug 27, 2013 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ja stimmt Xeres ist kein Integer. Macht aber keinen Unterschied, da man den Type genauso übergeben etc kann. Aber mir fällt ein Fall ein:

Wenn ich in einer 3D Welt objekte in Types habe und diese Entitys sind pickable kann ich in ihrem Namen den Wert von Handle speichern. EntityPick liefert mir das Entity, dann komme ich an den Namen und zack habe ich per Object wieder den ganzen Type. Fraglich nur ob dieses Hin und Hergecaste schneller ist als einfach die Typeliste durchzugehen - wobei bei vielen Objekten...


lg,
Count-Doku

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group