F:
Wie kann ich vermeiden, dass Gegner mich sehen, wenn der Spieler sich in
ein anderes Model verwandelt hat (mit ent_morph)?
A:
Schalten Sie enable_scan für Ihren Spieler ab und die Gegner werden
ihn nicht mehr sehen (wenn Sie scan_entity verwenden, was sie sollten).
F:
Ich verwende hit_smoke und hit_sparks für eine meiner Waffen, damit
es aussieht, als ob Staub aufgewirbelt wird, wenn der Boden getroffen wird.
Mein Problem ist, dass dies auch geschieht, wenn ein Feind getroffen wird...
gibt es einen einfachen Weg, das zu ändern?
A:
Öffnen Sie weapons.wdl, suchen Sie die Funktion hitpoint_effect und
fügen Sie die roten Codezeilen hinzu:
function
_hit_point_effect()
{
// flash at hit point?
if((fire_mode & MODE_HIT) == HIT_FLASH)
{
weaponTmpSyn = YOU; // save YOU value
create(small_flash,TARGET,_blowup);
YOU = weaponTmpSyn;
}
// smoke at hit point?
if(fire_mode & HIT_SMOKE)
{
if (you == null)
{
emit(20,TARGET,particle_smoke); // emit smoke
}
}
if(fire_mode & HIT_SPARKS)
{
if (you == null)
{
emit(20,TARGET,particle_scatter); // emit sparks
}
}
.......................................................
}
F:
Ich habe gerade von der Demo auf die Extra Version aufgerüstet. Nun
haben alle Models weiße Quadrate an den Füßen, wo sie
den Boden berühren. Wieso?
A:
Das ist das alte Schattensystem, das nicht gut mit einigen Grafikkarten
/ Treibern zusammenarbeitet. Öffnen Sie die animate.wdl, suchen Sie
die action drop_shadow und ändern Sie diese wie gezeigt:
ACTION
drop_shadow
{
return;
IFDEF CAPS_FLARE;
if(VIDEO_DEPTH >= 16)
{
create(SHADOWSPRITE,MY.POS,move_shadow);
}
else
{
create(SHADOWFLAT,MY.POS,move_shadow);
}
IFELSE;
create(SHADOWFLAT,MY.POS,move_shadow);
ENDIF;
}
F:
Wieviele Events kann eine Action haben?
A:
Eine Action kann eine einzelne Eventfunktion haben, aber auf soviele Events
reagieren, wie Sie möchten. Hier ist ein Beispiel:
function how_tor_react( );
action
i_am_sensitive
{
my.enable_block = on;
my.enable_click = on;
my.enable_touch = on;
my.enable_scan = on;
..............................
my.event = how_to_react;
}
function
how_to_react( )
{
if (event_type == event_block)
{
// event_block was triggered
........................................
}
if (event_type == event_click)
{
// event_click was triggered
.......................................
}
if (event_type == event_touch)
{
// event_touch was triggered
........................................
}
if (event_type == event_scan)
{
// event_scan was triggered
.......................................
}
}
F:
Ich habe ein 2D / 3D Seitscroller Spiel gemacht und möchte nun, dass
die Kamera einen Punkt X Quants vor dem Spieler anpeilt.
A:
Verwenden Sie diesen Code als einen Anfang:
var
horizontal_offset = 100;
var
vertical_offset = 50;
var
camera_distance = 400;
view
side_view // used as an alternative to the camera view
{
layer = 15;
pos_x = 0;
pos_y = 0;
size_x = 640;
size_y = 480;
flags = visible;
}
starter
init_view()
{
camera.visible = off;
while (player == null) {wait (1);}
while (1)
{
side_view.x = player.x + horizontal_offset;
side_view.y = player.y - camera_distance;
side_view.z = player.z + vertical_offset;
side_view.pan = player.pan + 90; // 0, 90, 180 or 270
wait (1);
}
}
F:
Wie benutze ich handle und ptr_for_handle?
A:
Jede Entity, Action, String, Bmap, Panel oder Pointer hat eine einzigartige
ID, wenn sie geladen oder erstellt wird. Handle wird benutzt, um diese
in einer Variable oder einem Skill zu speichern und ptr_for_handle holt
den alten Zeiger zurück. Lesen Sie den Artikel über “Perfekte
KI” in diesem Magazin für ein Beispiel.
F:
Wenn ich das Level starte, drehen sich meine Zauberer um und laufen gegen
die Wand. Wie erreiche ich es, dass sie einfach stehen? Ich benutze die
Action actor_walk_fight.
A:
Sie haben einen zu kleinen Wert für _HEALTH eingestellt. Erhöhen
Sie skill9 und alles wird wieder normal.
F:
Wie kann ich einen Gesundheitsbalken über dem Kopf eines Gegners anzeigen?
A:
Fügen Sie eine Codezeile an den Anfang der Action Ihrer Feinde hinzu
ACTION
actor_ai_one
{
ent_create (healthbar_mdl, my.pos, display_health);
// set up and call helper functions
// Health-
if (MY._HEALTH <= 0) { MY._HEALTH = 75; } // default 75 health
// Armor-
if (MY._ARMOR <= 0) { MY._ARMOR = 0; } // default 0 armor
// Force-
if (MY._FORCE == 0) { MY._FORCE = 1.5; } // default force
.................................................................
}
und kopieren Sie dann den folgenden Code an den Anfang Ihrer war.wdl:
string healthbar_mdl = <healthbar.mdl>;
function
display_health( )
{
my.passable = on;
while (you != null)
{
my.x = you.x;
my.y = you.y;
my.z = you.z + 50;
my.scale_y = you._health / 10;
vec_set(temp, camera.x);
vec_sub(temp, my.x);
vec_to_angle (my.pan, temp);
my.tilt = 0;
wait (1);
}
my.invisible = on;
}