|
Fragen aus dem Forum |
Top Previous Next |
|
F: Der Rundenzähler für die Rennfahrer KI aus AUM 35 funktioniert nicht mit der neuen Version A6.4 – wissen Sie, wie man das behebt? A: Ich habe das aktualisierte Projekt in das “Resources” Archiv dieses Monats gestellt.
F: Ich verwende Ihren Countdown Timer aus der FAQ von AUM 23. Ist es möglich, den Code so anzupassen, dass der Timer Minuten und Sekunden getrennt durch ein “:” anzeigt? A: Hier ist ein Beispiel.
string time_str; string temp_str;
var seconds = 185; // number of seconds to be counted down var temp_seconds;
starter count_down() { while(seconds > 0) { sleep (1); seconds -= 1; temp = int(seconds / 60); // compute the number of minutes str_for_num(time_str, temp); str_cat (time_str, " : "); temp_seconds = seconds - temp * 60; // compute the remainder (the number of seconds) str_for_num(temp_str, temp_seconds); if (temp_seconds < 10) { str_cat (time_str, "0"); // add a zero (if needed) } str_cat (time_str, temp_str); } }
text time_txt { pos_x = 300; pos_y = 20; string = time_str; flags = visible; }
F: In Workshop 34 aus AUM 59, ist es möglich, den Code so anzugleichen, dass keine Einschusslöcher im Himmel entstehen? A: Die einfachste Art das zu erreichen ist, die Wände für den Himmel als speziell zu markieren. Ich habe mich entschieden, dafür die Flag1 zu verwenden – der Code befindet sich im “Resources” Archiv dieses Monats.
F: Wie kann ich die Größe meines Terrains in Quants berechnen? A: Fügen Sie den folgenden Code am Ende Ihres Main Skriptes ein und plazieren Sie eine Entity mit der terrain_size Action im Level; dann wird die Größe auf dem Bildschirm angezeigt.
var t_sizex; var t_sizey; var t_sizez;
panel size_pan { pos_x = 40; pos_y = 40; digits (0, 10, "Size on x: %.0f", *, 1, t_sizex); digits (0, 40, "Size on y: %.0f", *, 1, t_sizey); digits (0, 70, "Size on z: %.0f", *, 1, t_sizez); flags = visible; }
action terrain_size { c_setminmax (my); t_sizex = my.max_x - my.min_x; t_sizey = my.max_y - my.min_y; t_sizez = my.max_z - my.min_z; }
F: Wie kann ich am schnellsten einen nicht-interaktiven Hintergrund für mein Level bekommen? A: Umgeben Sie Ihr Level mit einem ausgehöhlten Würfel, geben Sie diesem die “Sky” Flag und fügen Sie den folgenden Code im Skript ein.
bmap background_tga = <background+6.tga>; // that would be your background
sky background_cube { type = <background+6.tga>; layer = 10; z = 10; // play with this value flags = cube, visible; }
F: Warum spielt 3DGS nicht alle .wav Dateien aus meinem Ordner? Der Media Player hat keine Probleme... A: GameStudio unterstützt Samples mit 11, 22 und 44 KHz und 8 bzw. 16 Bit Datenrate. Konvertieren Sie andere .wav Dateien entsprechend, z.B. mit dem kostenlosen Programm Audacity.
F: Mein Spieler soll einen Levelwechsel auslösen, wenn er einen bestimmten Bereich betritt. Wie geht das? A: Geben Sie einer Entity im Zielbereich die folgende Action; ändern Sie Skill1, bis das Ergebnis zufriedenstellend ist.
string newlevel_wmb = <work34.wmb>; // put the name of your level here
define trigger_distance, skill1; // set the trigger distance in skill1
// uses trigger_distance action level_trigger { while (player == null) {wait (1);} // wait until the player is loaded if (my.trigger_distance == 0) // the player has forgotten to set the distance in skill1? { my.trigger_distance = 200; // then use a default value of 200 quants } my.skill40 = 0; while (my.skill40 == 0) { if (vec_dist (my.x, player.x) < my.trigger_distance) // the player has come close? { my.skill40 = 1; // don't run this loop anymore level_load (newlevel_wmb); // load the new level } wait (1); } }
F: Wie funktioniert das ineinderblenden verschiedener Animationen? Ich versuche, es zu benutzen, um zwischen verschiedenen Animationsphasen zu interpolieren, z.B. zwischen “wait” und “work”. A: Hier ist ein Beispiel.
action wait_to_work { while (key_b == off) // play the "wait" animation until the player presses the "B" key { ent_animate (me, "wait", my.skill46, anm_cycle); my.skill46 += 1 * time_step; my.skill46 %= 100; wait (1); } my.skill42 = 0; while(my.skill42 < 100) { ent_animate (me, "wait", my.skill42, anm_cycle); ent_blend("work", 0, my.skill42); // blend "wait" into "work" my.skill42 += 10 * time_step; wait(1); } while (1) { ent_animate (me, "work", my.skill47, anm_cycle); my.skill47 += 1 * time_step; my.skill47 %= 100; wait (1); } }
F: Ich suche ein schnelles Beispiel eines Shooters wie Moorhuhn. Das ist ein Spiel, bei dem man mit der Maus auf vorbeifliegende Vögel zielt und Punkte erhält. A: Hier ist ein einfaches Beispiel; betrachten Sie den Code im “\moorhuhn” Ordner des Archivs.
F: Ich weiß, dass es möglich ist, View Entities zu erstellen, aber gibt es auch View Partikel? Ansonsten ist es ein trigonometrischer Albtraum, die Partikel an die gleiche Stelle wie die Entitiy zu plazieren. A: Es gibt keine View Partikel, aber Sie können eine View Entity verwenden und die Partikel entsprechend plazieren. Hier ist ein Beispiel einer Fackel, die aus einer View Entity und Partikeln besteht, die im “richtigen” Level plaziert werden und die korrekte Position erhalten.
bmap flame_tga = <flame.tga>;
function flame_init(); function fade_flames();
entity torch_ent { type = <torch.mdl>; // torch model x = 55; y = -22; z = -25; tilt = -10; flags = visible; }
starter flames_on() { proc_late(); var flame_pos; while(1) { vec_set (flame_pos.x, vector (25, -9, -3)); // play with these values vec_rotate (flame_pos.x, camera.pan); vec_add (flame_pos.x, camera.x); effect(flame_init, 2, flame_pos.x, nullvector); wait (1); } }
function flame_init() { temp.x = (random(2) - 1) / 2; temp.y = (random(2) - 1) / 2; temp.z = random(1) + 1; vec_set(my.vel_x, temp); my.move = on; my.bmap = flame_tga; my.flare = on; my.bright = on; my.alpha = 70; my.lifespan = 100; my.size = 12; my.function = fade_flames; }
function fade_flames() { my.alpha -= 25 * time_step; // play with 25 if(my.alpha < 0) {my.lifespan = 0;} }
|