Einblenden und Ausblenden

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.