De/Spawn(): Difference between revisions
Thunder4ik (talk | contribs) m (→top: Unicodifying, replaced: [[Image: → [[File:) |
No edit summary |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 2: | Line 2: | ||
[[File:Entity init.png|right|130px|The Source engine entity initialisation process.]] | [[File:Entity init.png|right|130px|The Source engine entity initialisation process.]] | ||
'''<code>Spawn()</code>''' ist eine <code>void</code>-Memberfunktion von <code> | '''<code>Spawn()</code>''' ist eine <code>void</code>-Memberfunktion von <code>{{L|CBaseEntity}}</code>, welche über Vererbung jeder Entity in einem Source-Spiel zur Verfügung steht. Sie wird von der Engine aufgerufen wenn eine neue Instanz einer Entity erstellt wird, vergleichbar mit einem Konstruktor. Manche Basisklassen führen aus dieser Methode heraus Code aus, sodass man immer <code>BaseClass::Spawn()</code> in seiner eigenen Methode aufrufen sollte. | ||
<code>Spawn()</code> wird verwendet, um Aufgaben zu erledigen, die erledigt werden müssen, bevor die Entity die Welt betritt, wozu in der Regel das Aufrufen von <code> | <code>Spawn()</code> wird verwendet, um Aufgaben zu erledigen, die erledigt werden müssen, bevor die Entity die Welt betritt, wozu in der Regel das Aufrufen von <code>{{L|Precache()}}</code> und <code>{{L|SetSolid()}}</code> gehört, das Initialisieren der {{L|VPhysics}}-Simulation und das einrichten globaler KI-Parameter. | ||
Das Initialisieren der Variablen sollte im | Das Initialisieren der Variablen sollte im {{L|Wikipedia:Constructor (object-oriented programming)|Konstruktor}} durchgeführt werden und nicht in der <code>Spawn()</code>-Methode, um um das Überschreiben von Daten zu vermeiden. | ||
{{warning | {{warning|<code>Spawn()</code> wird '''sofort''' nach dem Erzeugen der Entity aufgerufen. Wenn dies während des Ladens eines Levels auftritt, gibt es keine Garantie dafür, dass andere Entitys bereits spawnten (außer sie werden durch die Entity selbst gespawnt). Deshalb ist jeder Code unzuverlässig, der die Entity nach anderen Entities suchen lässt oder sich mit diesen Verbinden lässt. Man sollte die <code>{{L|Activate()}}</code>-Methode für solche Aufgaben benutzen, welche aufgerufen wird, sobald alle Spawns durchgeführt wurden.}} | ||
{{tip | {{tip|<code>{{L|CBasePlayer}}::Spawn()</code> wird auch aufgerufen, wenn der Spieler respawnt. Man sollte <code>InitialSpawn()</code> für Code benutzen, der nur einmal laufen soll.}} | ||
== Beispiel == | == Beispiel == | ||
Line 36: | Line 36: | ||
== Siehe auch == | == Siehe auch == | ||
* | *{{L|Activate()}} | ||
* | *{{L|Thinking}} | ||
* | *{{L|Your First Entity}} | ||
{{ACategory|Functions}} |
Latest revision as of 12:42, 16 May 2025
Spawn()
ist eine void
-Memberfunktion von CBaseEntity
, welche über Vererbung jeder Entity in einem Source-Spiel zur Verfügung steht. Sie wird von der Engine aufgerufen wenn eine neue Instanz einer Entity erstellt wird, vergleichbar mit einem Konstruktor. Manche Basisklassen führen aus dieser Methode heraus Code aus, sodass man immer BaseClass::Spawn()
in seiner eigenen Methode aufrufen sollte.
Spawn()
wird verwendet, um Aufgaben zu erledigen, die erledigt werden müssen, bevor die Entity die Welt betritt, wozu in der Regel das Aufrufen von Precache()
und SetSolid()
gehört, das Initialisieren der VPhysics -Simulation und das einrichten globaler KI-Parameter.
Das Initialisieren der Variablen sollte im Konstruktor durchgeführt werden und nicht in der Spawn()
-Methode, um um das Überschreiben von Daten zu vermeiden.

Spawn()
wird sofort nach dem Erzeugen der Entity aufgerufen. Wenn dies während des Ladens eines Levels auftritt, gibt es keine Garantie dafür, dass andere Entitys bereits spawnten (außer sie werden durch die Entity selbst gespawnt). Deshalb ist jeder Code unzuverlässig, der die Entity nach anderen Entities suchen lässt oder sich mit diesen Verbinden lässt. Man sollte die Activate()
-Methode für solche Aufgaben benutzen, welche aufgerufen wird, sobald alle Spawns durchgeführt wurden.
CBasePlayer ::Spawn()
wird auch aufgerufen, wenn der Spieler respawnt. Man sollte InitialSpawn()
für Code benutzen, der nur einmal laufen soll.Beispiel
void CNPC_Antlion::Spawn()
{
Precache();
SetHullType( HULL_MEDIUM );
SetHullSizeNormal();
SetDefaultEyeOffset();
SetNavType( NAV_GROUND );
SetSolid( SOLID_BBOX );
AddSolidFlags( FSOLID_NOT_STANDABLE );
SetMoveType( MOVETYPE_STEP );
...
}