Entity = Instanz usw?
Übersicht

sonicfireBetreff: Entity = Instanz usw? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Servus!
Kann ich einer Entity Variablen mit auf den Weg geben? z.b. MeinKlotz.Breite = 60? Ich bin ein bisschen OO-arbeiten gewohnt, und Instanzen handling usw fehlt mir hier ein bisschen... Zum Beispiel vermisse ich solche Schlüsselwörter wie "You" oder "Me" um auf Instanzen zugreifen zu können. Habe gerade ein Problem das ich via Types mehrere Entities auf dem Schirm habe, aber keine Ahnung, wie ich über die Entities Variablen der Types abfragen kann.... vermutlich würfel ich das ein wenig durcheinander, keine Ahnung... mhh ![]() Als Beispiel: Ich habe drei Kisten im Level. Mit EntityPick kann ich z.b. eine Kiste die andere "scannen" lassen und mir zurückgeben, ob das auch eine Entity vom Typ "Kiste" ist , oder nicht. Aber wie gehts weiter? Ich kann ja dann nicht "gefundeneEntity.Breite = xyz" sagen! Bin noch etwas verwirrt! ![]() |
||
~sonic |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Du könntest beispielsweise das ObjektHandle des zum Entity gehörendem Types dem Entity als Name übergeben. Wenn Du das Entity pickst, dann kannst Du über den Namen (bzw. das darin gespiecherte Handle) auf das Type-Objekt casten und zugreifen.
Eine von verschiedenen Möglichkeiten. Eine andere wäre, das Entity im Type zu verlinken und dann mit For Each die Type Liste nach dem Entity abzusuchen. usw... |
||
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau dir mal types an. Diese Form der Variablenverarbeitung ist am nächsten am OOP dran.
ql:type |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also so wie entity.breite gehts bei B3D nicht. Alles was geht, sagen diese befehle:
Code: [AUSKLAPPEN] EntityAutoFade
EntityBlend EntityBox EntityCollided EntityColor EntityClass EntityDistance EntityFX EntityInView EntityName EntityOrder EntityParent EntityPick EntityPickMode EntityPitch EntityRadius EntityRoll EntityShininess EntityTexture EntityType EntityVisible EntityX EntityY EntityYaw EntityZ ExtractAnimSeq Ich nehme onehin immer z.B. für Gegner Types, in denen sowohl das Mesh, als auch Engergie, evtl. Grösse, Kraft etc. gespeichert sind. So: Code: [AUSKLAPPEN] Type gegener field x,y field mesh field sizex, sizey end type In etwa. MfG Blitzcoder |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
sonicfire |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke erstmal für alle Antworten!! ![]() Ava hat Folgendes geschrieben: Du könntest beispielsweise das ObjektHandle des zum Entity gehörendem Types dem Entity als Name übergeben. Wenn Du das Entity pickst, dann kannst Du über den Namen (bzw. das darin gespiecherte Handle) auf das Type-Objekt casten und zugreifen.
Eine von verschiedenen Möglichkeiten. Eine andere wäre, das Entity im Type zu verlinken und dann mit For Each die Type Liste nach dem Entity abzusuchen. usw... Da fehlts mir dann doch an ...öhm... Sachverstand... "auf das Type-Objekt casten" ? ![]() Momentan ist es so das ich eine For Each Type - Schleife habe, und von dort aus inaktive Entities (innerhalb eines Types) scanne lassen (sie selbst scannen "um sich herum") und sollen bei anderen Entities .....ja, Werte setzen... das Problem ist nur, das müsste innerhalb des Types geschehen....puah, schwer zu erklären ![]() |
||
~sonic |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Schau Dir mal diese zwei Befehle an:
Handle Object + Ava + |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sonicfire hat Folgendes geschrieben: Danke erstmal für alle Antworten!!
![]() Ava hat Folgendes geschrieben: Du könntest beispielsweise das ObjektHandle des zum Entity gehörendem Types dem Entity als Name übergeben. Wenn Du das Entity pickst, dann kannst Du über den Namen (bzw. das darin gespiecherte Handle) auf das Type-Objekt casten und zugreifen.
Eine von verschiedenen Möglichkeiten. Eine andere wäre, das Entity im Type zu verlinken und dann mit For Each die Type Liste nach dem Entity abzusuchen. usw... Da fehlts mir dann doch an ...öhm... Sachverstand... "auf das Type-Objekt casten" ? ![]() Momentan ist es so das ich eine For Each Type - Schleife habe, und von dort aus inaktive Entities (innerhalb eines Types) scanne lassen (sie selbst scannen "um sich herum") und sollen bei anderen Entities .....ja, Werte setzen... das Problem ist nur, das müsste innerhalb des Types geschehen....puah, schwer zu erklären ![]() Erm du redest von OO Erfahrung, scheinst aber noch nicht einmal die Struct Grundzüge zu verstehen? (Type entspricht einer Struct) Und wenn es sich nicht einfach erklären lässt, versuchst du vermutlich eine recht simple sache extrem kompliziert zu lösen ^^ |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
sonicfire |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Thanks! Werd leider noch nicht so ganz schlau draus...
EDIT : Naja, sollte nicht grosskotzig klingen, letztendlich habe ich kaum Erfahrung damit. Das sollte nichts weiter heissen, als das ich vom GameMaker (v. Mark O.) komme *lach* ... jetzt wird´s richtig peinlich ![]() Aber das Type quasi eine Struct ist, weiss ich! *G* |
||
~sonic |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Versuche Mal zu erklären, was du genau erreichen willst.
Normalerweise macht man es so das man einen Type macht, wo man eine Referenz auf das "3D Objekt" speichert in einem Field. Das You und Me existiert auch in Blitz, nur musst du Funktionen schreiben, die das You und Me erst bestimmen, so wie es 3DGS intern auch macht. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
sonicfire |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dreamora hat Folgendes geschrieben: Versuche Mal zu erklären, was du genau erreichen willst.
Normalerweise macht man es so das man einen Type macht, wo man eine Referenz auf das "3D Objekt" speichert in einem Field. Das You und Me existiert auch in Blitz, nur musst du Funktionen schreiben, die das You und Me erst bestimmen, so wie es 3DGS intern auch macht. Ich versuchs mal. Ich habe hier so eine Art Weltraum-Level. Dort bewegt man sich hin und her und kann "Teleporter-Einheiten" plazieren. (Nenn ich´s mal einfach so). Jedes mal wenn ich so eine Einheit plaziere, mach ich das über Code: [AUSKLAPPEN] tporters.type_tpstand = New type_tpstand tporters\entity = CopyEntity(tpstand) ; 3ds mesh tporters\x = EntityX(camera) tporters\y = EntityY(camera) tporters\z = EntityZ(camera) tporters\state = 0 ; 0=off, 1=active So. Jetzt möchte ich überprüfen, ob eine Einheit die andere erreichen / "sehen" kann. Und zwar via EntityPick. Das Problem ist nun, ich würde es gerne so machen, das wenn ich drei von diesen Einheiten plaziert habe, das sich dann so eine Art... nennen wir es "Kraftfeld" zwischen diesen Einheiten bildet / aufbaut (später per 3d Linien zeichnen(?)). Dazu muss ich also jeweils testen, ob mind. drei Einheiten existieren (und später auch noch: ob der Abstand zwischen denen nicht zu groß ist). Aber da ich ja nun diese Einheiten per Types plaziere...öhm ,ja... bin ich mir noch nicht so ganz sicher wie ich das überprüfen kann und was noch viel wichtiger ist , wie ich dann einen Wert eines Feldes eines dieser Einheiten mit einem neuen Wert belegen kann (tporters\state = 1) ! ![]() Das ist es im großen und ganzen! Würde mir liebend gerne globale "You" und "Me" Funktion definieren, aber da weiss ich absolut nicht wie das gehen soll ![]() |
||
~sonic |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Wo da jetzt genau das Problem liegen soll, habe ich noch immer nicht
verstanden. *lächel* Du hast das Entity direkt im Type gespeichert, also kannst Du sowohl auf das Entity als auch das Objekt zugreifen, wenn Du sie in einer Schleife durchgehst. Wenn Du nun überprüfen möchtest, ob eines Deiner Teleporterdinger ein anderes in sichtbarer Reichweite hast, dann verschachtelst Du einfach zwei For Each Schleifen und überprüfst das. ![]() Und wie Du einem Objekteintrag einen neuen Wert zuweisst, das hast Du doch selber schon geschrieben... hmm... nun bin ich etwas verwirrt! ![]() + Ava + |
||
sonicfire |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Öhm ![]() ![]() Okay, dann versuch ich´s mal so: Code: [AUSKLAPPEN] For tporters.type_tpstand = Each type_tpstand EntityPickMode tporters\entity,0 ; dont pick myself chkent = EntityPick(tporters\entity,1000) ; scan for other teleporters If chkent ???!?!? :) chkent.? chkent.state = ? das geht ja eben nicht *G* EndIf EntityPickMode tporters\entity,1 |
||
~sonic |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] For a.type_tpstand = each type_tpstand For b.type_tpstand = each type_tpstand If a <> b Then ; und hier kannste dann Deine Teleporterdinger auf Entfernung und Sichtbarkeit usw. vergleichen EndIf Next Next Betrachte es als Pseudocode, da ich lange nicht mehr mit B3D gearbeitet habe und Flüchtigkeitsfehler somit kaum ausschliessen kann. *lächel* + Ava + [/edit] EntityVisible ist im Übrigen für diese Aufgabe glaube ich besser geeignet, als PickEntity. |
||
sonicfire |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das mit EntityVisible ist echt eine gute Idee!
Danke! Obwohl ich jetzt immer noch verwirrt bin *G* If a<>b? Warum zwei Types? ![]() |
||
~sonic |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Weil du 2x alle types durchgehst und ja nicht willst, das der Teleporter sich selbst auch betrachtet und das ist nur dann der fall wenn a <> b ist (da a und b alle Elemente des Types sein werden) | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
sonicfire |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ööööhm...okay! Das heisst auch wenn ich mir neue Teleporter erstelle bzw. im Level plaziere soll ich jedesmal einen neuen Type ...öhm... instanziieren? ![]() Weil bis dato war es ja teleporters.type_tpstand... quasi .... seufz *G* ![]() |
||
~sonic |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Du scheinst mir echt ein Meister im Verwirrung stiften zu sein, hm? *smile*
sonicfire hat Folgendes geschrieben: Jedes mal wenn ich so eine Einheit plaziere, mach ich das über Code: [AUSKLAPPEN] tporters.type_tpstand = New type_tpstand tporters\entity = CopyEntity(tpstand) ; 3ds mesh tporters\x = EntityX(camera) tporters\y = EntityY(camera) tporters\z = EntityZ(camera) tporters\state = 0 ; 0=off, 1=active Scheint mir, als würdest Du das bereits tun... also jedesmal ein neues Objekt Deines Types zu erstellen, wenn ein neues Teledings ins Spiel kommt. ![]() |
||
sonicfire |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ava hat Folgendes geschrieben: Du scheinst mir echt ein Meister im Verwirrung stiften zu sein, hm? *smile*
sonicfire hat Folgendes geschrieben: Jedes mal wenn ich so eine Einheit plaziere, mach ich das über Code: [AUSKLAPPEN] tporters.type_tpstand = New type_tpstand tporters\entity = CopyEntity(tpstand) ; 3ds mesh tporters\x = EntityX(camera) tporters\y = EntityY(camera) tporters\z = EntityZ(camera) tporters\state = 0 ; 0=off, 1=active Scheint mir, als würdest Du das bereits tun... also jedesmal ein neues Objekt Deines Types zu erstellen, wenn ein neues Teledings ins Spiel kommt. ![]() Naja, wie sollte ich es auch anders machen? ![]() tporters ist quasi ein Container für all meine aufgestellten Teleporter! Oder habe ich das mit den Types auch noch nich so ganz gerafft? Hmm. ![]() |
||
~sonic |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
tporters ist in diesem Fall lediglich eine Variable, die auf das letzte erstellte type_tpstand Objekt zeigt. ![]() Der Container (ich denke, damit meist Du die Liste, die alle type_tstand Objekte speichert?) wird von Blitz automatisch verwaltet und ist immer vorhanden. Sobald Du ein Objekt dieses Types erstellst, wandert es in diese Liste - wenn Du das Objekt deletest, dann wird es aus der Liste entfernt. Du kannst diese Liste mit For Each durchlaufen lassen, wobei die angegebene Variable (in meinem Beispiel a und b) wieder quasi nur Pointer auf den Eintrag in der Liste ist, an deren Position sich die Schleife gerade befindet. LaLaLa |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group