event
Die event-Funktion wird von Entity-Events ausgeführt.
Typ:
Funktions-Pointer.
Bemerkungen:
- Tatsächlich werden Eventfunktionen während der Engine-Funktion,
die den Event verursachte, etwa einer c_move-, c_scan-oder c_trace-Anweisung
einer anderen Entity, ausgeführt. Die Eventfunktion selbst sollte
einfach sein. Normalerweise sollte sie keine Informationen an die
Main-Funktion der Entity übermitteln - sie sollte keine Anweisungen
ausführen, die wiederum selbst Events auslösen, Entities verschieben
oder sonst irgendetwas im Level verändern können. Anweisungen
wie c_move, ent_create, ptr_remove, c_trace etc.
dürfen also nicht durchgeführt werden. Sollte dies nämlich
der Fall sein, können alle möglichen unschönen Dinge passieren:
etwa dass zwei Entities bis ins Unendliche gegenseitg ihren Event auslösen
(in diesem Falle würde das Game einfrieren). Muß die Eventfunktion
aus irgendeinem Grund solche 'kritischen Anweisungen' durchführen,
müssen diesen, um sie aufs nächste Frame hin zu verzögern
ein wait(1)
vorangestellt sein, dann ist es sicher.
- Nach dem Start einer event-Funktion sind alle eventabhängigen
Variablen und Pointer, wie normal etc.,
nur bis zur nächsten wait-Anweisung
gültig. Während der wait-Pause
können sie (und werden es sicherlich auch) von anderen Funktionen
verändert werden. Wollen Sie diese länger behalten, kopieren
Sie sie können sie in lokale Variablen oder Entity-Skills. Der Übersichtlichkeit
halber sollte die Hauptaktion der Entity die meiste Arbeit tun. Halten
Sie die Event-Funktion so einfach wie möglich und ohne jegliche wait-Anweisungen.
Beispiel (lite-C):
// The following example shows how to use events for an object that flies ahead until it collides with a block or entity.
// The event function then plays a collision sound and lets the object ricochet from the surface.
function bounce_event()
{
switch (event_type)
{
case EVENT_BLOCK:
ent_playsound(my,whamm,50);
vec_to_angle(my.pan,bounce); // change direction
return;
case EVENT_ENTITY:
ent_playsound(my,boingg,50); // play a different sound
vec_to_angle(my.pan,bounce); // change direction
return;
}
}
action bounceball()
{
my.emask |= (ENABLE_BLOCK | ENABLE_ENTITY); // make entity sensitive for block and entity collision
my.event = bounce_event;
while(1)
{
c_move(me,vector(5*time_step,0,0),nullvector,0); // move ahead until obstacle is hit
wait(1);
}
}
Beispiel (C-Skript):
function bounce_event()
{
if (event_type == EVENT_BLOCK)
{
ent_playsound(my,whamm,50);
vec_to_angle (my.pan,bounce); // change direction
return;
}
if (event_type == EVENT_ENTITY)
{
ent_playsound(my,boingg,50); // play a different sound
vec_to_angle (my.pan,bounce); // change direction
return;
}
}
action bounceball()
{
my.ENABLE_BLOCK = ON; // make entity sensitive for block collision
my.ENABLE_ENTITY = ON; // make entity sensitive for entity collision
my.event = bounce_event;
while(1)
{
c_move(me,vector(5*time_step,0,0),nullvector,0); // move ahead until obstacle is hit
wait(1);
}
}
Siehe auch:
Events, event_type
► Aktuelle Version Online