Hi Leute,
ich habe die Steuerung für meinem Heli-Sidescroller soweit fertig! Allerdings finde ich, dass sich der Heli noch etwas starr bewegt. Wenn man in eine Richtung fliegt und wendet, unterbricht er die Bewegung abrupt.
Außerdem habe ich eine Seitwärtsbewegung in der Mittelstellung (Heli schaut zur Kamera) nur mit extra Tasten (N&M) hinbekommen. Ich hätte es lieber gehabt, dass sich der Heli bei kurzen Tastendruck der Pfeiltasten seitlich bewegen lässt ohne zu wenden und nur bei längerer Richtungsangabe sich dorthin dreht.
Da ich in Scripten Anfänger bin, dachte ich jemand von den Profis hat vielleicht eine bessere Lösung oder einen Tip für die Steuerung!
Dex
Code:
///////////////////////////////////////////////////////////////////////////////////
// Heli-Demo
///////////////////////////////////////////////////////////////////////////////////
var video_mode = 7; // 800x600;
var video_depth = 16; // D3D mode
var camera_distance = 900; // play with these values
var camera_height = 200;
var Heli_rotatepeed = 15;
var Heli_movespeed = 0.2;
var Helipos_y = 700;
//---------------------------------------------------------------------------------
function main()
{
camera.arc = 65; // set field of view
fps_max = 50; // limit the frame rate
//d3d_panels = on; // draw hardware accelerated panels
load_level (<Heli.wmb>);
wait (2); // wait for the level to load
}
//---------------------------------------------------------------------------------
action my_Heli() // use the up, left and right arrow keys to control the boat
{
define Helispeed_x,skill1; // Speed in X-Achse
define Helispeed_z,skill2; // Speed in Z-Achse
define Helirotate_marker,skill3; // Marker für Heli Ausrichtung: 1=Links, 2=Rechts, 0=Mitte
define Helispeed_xmid,skill4; // Speed in X-Achse bei Mittelstellung
while (1)
{
// ------------------- Heli Steuerung --------------------------
if (key_cuu) // Wird Pfeil nach oben gedrückt steigt der Heli
{
if (my.Helispeed_z < 3)
{
my.Helispeed_z += 0.3 * time_step;
}
}
else // Sonst sinkt der der Heli von selbst!
{
if (my.Helispeed_z > -2)
{
my.Helispeed_z -= 0.05 * time_step;
}
}
if (key_cud) // Wird Pfeil nach unten gedrückt geht der Heli runter
{
if (my.Helispeed_z > -3)
{
my.Helispeed_z -= 0.3 * time_step;
}
}
if (key_cur) // Wird Pfeil nach Rechts gedrückt fliegt der Heli nach rechts
{
my.Helirotate_marker = 2;
if (my.pan == 270)
{my.pan += 1;}
if (my.Helispeed_x < 4)
{
my.Helispeed_x += Heli_movespeed * time_step;
}
}
if (key_cul) // Wird Pfeil nach Links gedrückt fliegt der Heli nach links
{
my.Helirotate_marker = 1;
if (my.pan == 270)
{my.pan -= 1;}
if (my.Helispeed_x < 4)
{
my.Helispeed_x += Heli_movespeed * time_step;
}
}
if (my.pan == 270) // Ist der Heli in Mittelstellung verbleibt er solange keine andere Richtungseingabe kommt!
{
if (key_n) // Wird N für Links in Mittelstellung gedrückt, fliegt der Heli mittig nach links
{
my.Helispeed_xmid = -2;
}
else
{
if (key_m) // Wird M für Rechts in Mittelstellung gedrückt, fliegt der Heli mittig nach rechts
{
my.Helispeed_xmid = 2;
}
else
{
my.Helispeed_xmid = 0; // Keine Bewegung in Mittelstellung
}
}
my.Helirotate_marker = 0; // Marker für Heli Ausrichtung wieder reseten!
}
else
{
if ((my.pan > 180) && (my.Helirotate_marker==1)) // Heli macht die angefangene Drehung nach Links zuende
{
my.pan -= Heli_rotatepeed * time_step;
if (my.pan <= 180)
{
my.pan = 180;
my.Helirotate_marker = 0;
}
}
if ((my.pan < 360) && (my.Helirotate_marker==2)) // Heli macht die angefangene Drehung nach Rechts zuende
{
my.pan += Heli_rotatepeed * time_step;
if (my.pan >= 360)
{
my.pan = 360;
my.Helirotate_marker = 0;
}
}
}
clamp(my.Helispeed_x, -4, 4);
clamp(my.Helispeed_z, -3, 3);
c_move (my, vector(my.Helispeed_x, my.Helispeed_xmid, my.Helispeed_z), nullvector, GLIDE);
my.y = Helipos_y; // Raumtiefe bleibt konstant!!
// ------------------- Kamera Steuerung --------------------------
camera.pan = 90; // set and keep the camera position
camera.tilt = 0;
camera.roll = 0;
camera.x = my.x;
camera.y = my.y - camera_distance;
camera.z = my.z + camera_height;
wait (1);
}
}