Warum sollten Ein- und Ausblendungen notwendig sein? Nun, vielleicht möchten Sie einen weichen Übergang zwischen zwei Szenen schaffen, die Credits anzeigen, dem Spieler eine Todesszene zeigen usw. Die gute Nachricht ist, dass der Code dieses Artikels leicht zu verstehen ist und weniger als 3 kB an Grafikspeicher benötigt. Verwenden Sie keine Panels; diese brauchen zuviel Speicher!
Dies ist die Anfängerecke, daher ist die Idee simpel: wir benutzen eine Entity, setzen sie vor die Kamera und verändern ihren Alpha Wert. Schauen wir uns den Code an, der diese Entity erzeugt:
entity
fader_ent
{
type = <fader.mdl>;
layer = 40;
alpha = 0;
pan = 90;
flags = transparent, visible;
view = camera;
x = 250; // 250 quants ahead of the view
y = 0;
z = 0;
}
Mein Model heißt fader.mdl und ich habe seinen Pan so angepaßt, dass es die Sicht auf jeden Fall komplett versperrt. Die Entity ist transparent und sichtbar und wird 250 Quants vor die View plaziert. Sehen wir uns nun die Funktion für den Ein- und Ausblendeeffekt an:
function
fade_in()
{
while (fader_ent.alpha > 5)
{
fader_ent.alpha -= 5 * time;
wait (1);
}
fader_ent.alpha = 0;
}
function
fade_out()
{
while (fader_ent.alpha < 95)
{
fader_ent.alpha += 5 * time;
wait (1);
}
fader_ent.alpha = 100;
}
on_i
fade_in;
on_o
fade_out;
Die erste Funktion (fade_in) startet, wenn die “i” Taste auf dem Keyboard gedrückt wird; sie verringert den Alpha Wert der fader_ent, bis dieser unter 5 sinkt und setzt ihn dann auf 0 (als ob die Entity nicht existierte). Rufen Sie diese Funktion auf, wenn Sie fade_out benutzt haben, der Bildschirm schwarz ist und Sie zum Spiel zurückkehren möchten. Die Funktion fade_out nämlich wird den Bildschirm verdunkeln, bis der alpha Wert der fader_ent größer ist als 95 und setzt diesen dann auf 100 (komplett schwarz). Starten Sie Ihr Level und drücken “o”, um auszublenden und dann “i”, um wieder einzublenden. Wenn Sie einen der Funktionsaufrufe in eine Action oder Funktion in Ihrem Spiel schreiben:
fade_in();
fade_out();
können Sie einblenden und ausblenden, wann immer Sie möchten. Natürlich können Sie auch die Farbe der Entity ändern, um Blut, Wasser, Schleim, etc. zu simulieren. Sehen Sie sich das Bild unten an, um ein Beispiel für ein Fader Model mit komplett roter Skin zu sehen.
Staub
In heutigen Spielen sieht man nicht mehr viel Staub, oder? Die leistungsfähigen Computer halten die Straßen sauber, aber vielleicht könnten Sie manchmal, in der Wüste z.B., etwas Staub gebrauchen. Falls dies der Fall ist, lesen Sie weiter.
Der Staub wird mit Hilfe von Partikeln an den Füßen des Spielers erzeugt und steigt dann auf, während er langsam durchsichtig wird. Natürlich können Sie den gleichen Effekt für Ihre Gegner oder (noch besser) Ihre Fahrzeuge verwenden.
Wir beginnen mit einer “starter” Funktion, das ist eine Funktion, die beim Start des Spiels automatisch aufgerufen wird.
var
pos1;
var
pos2;
var
start_pos;
starter
init_dust()
{
while (player == null) {wait (1);}
while (1)
{
vec_set (pos1, player.pos);
wait (1);
vec_set (pos2, player.pos);
if (pos1 != pos2)
{
start_pos.x = player.x;
start_pos.y = player.y;
start_pos.z = player.z - 30;
effect (dust, 1, start_pos, normal);
}
}
}
Der
Code wartet, bis es einen Spieler gibt und speichert seine aktuelle Position
in einer Variable namens pos1. Wir warten einen Frame und speichern die
Position erneut, dieses Mal in einer Variable namens pos2. Nun gibt es
zwei Möglichkeiten:
a)
Der Spieler hat sich im letzten Frame nicht bewegt. In diesem Fall geschieht
nichts.
b)
Der Spieler hat sich im letzten Frame bewegt. Wenn dies der Fall ist, stehen
in pos1 und pos2 verschiedene Orte, also setzen wir start_pos auf einen
Wert nahe bei den Füßen des Spielers und beginnen mit der Funktion
“dust” dort Partikel zu erzeugen:
function
dust()
{
temp.x = (random(2) - 1) * 0.3;
temp.y = (random(2) - 1) * 0.3;
temp.z = (random(1) + 1) * 0.2;
vec_add (my.vel_x, temp);
my.alpha = 10 + random(5);
my.bmap = dust_pcx;
my.size = random(5) + 10;
my.flare = on;
my.move = on;
my.lifespan = 20;
my.function = fade_dust;
}
function
fade_dust()
{
my.alpha -= 0.3 * time;
if (my.alpha < 0) {my.lifespan = 0;}
}
Der Staub hat in x und y Richtung zufällige Geschwindigkeiten und in z Richtung eine ebenfalls zufällige aber in jedem Fall positive Geschwindigkeit, um sicherzugehen, dass er nach oben treibt. Die Bitmap für den Staub heißt dust_pcx und ihre Transparenz liegt ebenso wie die Größe zwischen 10 und 15. Die Partikelfunktion (fade_dust) reduziert ihren Alphawert, bis sie unsichtbar sind und entfernt sie dann.
Sie
können die Größe, den Alphawert, die Geschwindigkeit und
natürlich auch die Bitmap ändern, um Staub zu erstellen, der
Ihren Vorstellungen entspricht. Oh, und drücken Sie F7 einige Male
für eine Seitenansicht der Kamera, wenn Sie den Staub in voller Pracht
bewundern möchten.