Steuerung von Player

Posted By: Flo

Steuerung von Player - 12/01/07 08:42

Hallo Leute,
ich hab momentan ein kleines Problem:
Ich hab mir ein kleines Skript zur Steuerung des Player programmiert.
Jedoch kann er nicht springen. Des weiteren ignoriert er alle Erhebungen.
Also wenn er ne Rampe hochgehen soll läuft er im Block herum...

Außerdem fällt er nirgendwo herunter , z.B. von einer Plattform...
Code:

action player_init()
{
player = me;
while(my != null)
{
update_views();
//////////////////Player geht vorwärts////////////////////////
if(key_cuu==on)
{
if(key_cuu==on && key_s==on)
{
move_forward += 12*time;
c_move(me,vector(16*time,0,0),nullvector,GLIDE);
ent_animate(me,"run",move_forward,anm_cycle);
}
else
{
move_forward += 7*time;
c_move(me,vector(10*time,0,0),nullvector,GLIDE);
ent_animate(me,"run",move_forward,anm_cycle);
}

}
//////////////////////////////////////////////////////////////

//////////////////Player dreht sich nach rechts///////////////
if(key_cul==on)
{
my.pan += 1;
cam_angle += 1;
}
//////////////////////////////////////////////////////////////

//////////////////Player dreht sich nach Links////////////////
if(key_cur==on)
{
my.pan -= 1;
cam_angle -= 1;
}
//////////////////////////////////////////////////////////////

//////////////////Player gehts rückwärts//////////////////////
if(key_cud==on)
{
move_backward += 3*time;
c_move(me,vector(10*time,0,0),nullvector,GLIDE);
ent_animate(me,"run",move_backward,anm_cycle);
}
//////////////////////////////////////////////////////////////

//////////////Player-Attacke//////////////////////////////////
if(key_w==on)
{
while(attack_mode<100)
{
attack_mode += 6*time;
ent_animate(me,"attack",attack_mode,anm_cycle);
wait(1);
}
attack_mode=0;
}
//////////////////////////////////////////////////////////////

/////////////////Player springt///////////////////////////////
if(key_space==on)
{
temp = my.z;
while(stand_mode<100)
{
if(stand_mode<40)
{
my.z += 6*time;
}
else{my.z = temp;}
stand_mode += 8*time;
ent_animate(me,"jump",stand_mode,anm_cycle);
wait(1);
}
stand_mode = 0;
}
//////////////////////////////////////////////////////////////

///////////////Keine Taste ist gedrückt///////////////////////
if(key_any==off)
{
ent_blend("stand",stand_mode,100);
stand_mode += 3*time;
ent_animate(me,"stand",stand_mode,anm_cycle);
}
//////////////////////////////////////////////////////////////
my.anim_perc += 10*time;
wait(1);
}
}



Wäre schön, wenn mr jemand helfen könnte
Gruß
Flo
Posted By: ack

Re: Steuerung von Player - 12/01/07 23:19

Ich habe ein ähnliches Problem und kann dir leider nicht helfen, nur beistehen. Die meisten Programme in den AUM´s können nur Stufen hinaufgehen, bleiben dann aber oben. Es geht irgendwie mit dem C-trace aber wie ist mir noch nicht klar.

Liebe Grüße
Gerhard
Posted By: Flori

Re: Steuerung von Player - 12/02/07 10:18

Das mit dem hochlaufen ist einfach:

.......
vec_set (temp.x, my.x);
temp.z -= 5000;
distance_to_ground = c_trace (my.x, temp.x, ignore_me | use_box);
.......
movement_speed.y = 0;
movement_speed.z = - (distance_to_ground - 17);
movement_speed.z = max (-35 * time, movement_speed.z);
c_move (my, movement_speed.x, nullvector, glide&&ignore_passable);
.......

Das Springen bekomme ich leider selber noch nicht so richtig hin.
Posted By: Flo

Re: Steuerung von Player - 12/02/07 16:07

Hallo Flori,

danke schon mal für deine Hilfe, doch das Problem ist weiterhin noch nicht richtig behoben:
Sobald der Spieler wieder heruntergehen soll, bleibt er wie gewohnt of der Höhe stehen...

Gruß
Flo
Posted By: Flori

Re: Steuerung von Player - 12/02/07 18:25

Also bei mir funktioniert es.
Schau mal deinen Script durch das da kein Widerspruch ist.

Hier mal mein gesamter Player-Script:
action player
{
my.push = 2;
var anim_percentage;
var movement_speed;
var distance_to_ground;
player = my;
while (1)
{
my.pan += 5 * (key_cul - key_cur) * time;
vec_set (temp.x, my.x);
temp.z -= 5000;
distance_to_ground = c_trace (my.x, temp.x, ignore_me | use_box);
if(key_cud==on)
{
movement_speed.x=-18*(key_cud)*time;
}
else
{
movement_speed.x=18*(key_cuu)*time;
}
movement_speed.y = 0;
movement_speed.z = - (distance_to_ground - 17);
movement_speed.z = max (-35 * time, movement_speed.z);
c_move (my, movement_speed.x, nullvector, glide&&ignore_passable);
if ((key_cud == off) && (key_cuu == off))
{
ent_animate(my, "stand", anim_percentage, anm_cycle);
}
else
{
ent_animate(my, "walk", anim_percentage, anm_cycle);
}

anim_percentage += 13 * time;
wait (1);
}
}
Posted By: ARAS

Re: Steuerung von Player - 12/02/07 22:27

Hi,

ich habe Dir einmal eine gravity und eine einfache jump Funktion geschrieben.
Ich habe nicht viel kommentiert. Sollte etwas unklar sein melde Dich noch einmal.
Es kann sein das Du die c_scan Funktion in der Höhe an Deinen Player anpassen
musst. Sollte er nicht ganz auf dem Boden sein oder im Boden stecken.
Ich habe auch alle Definitionen angegeben eventuell musst Du andere Skills angeben. Ich habe Dein player Skript bis auf ein paar kleine Veränderungen
so gelassen.
Hier einmal das Skript:

Code:
 
define anim_perc,skill21;
define jumping,skill22;
define force_x,skill23;
define force_y,skill24;
define force_z,skill25;
define velocity_x,skill26;
define velocity_y,skill27;
define velocity_z,skill28;
define rel_speed_x,skill30;
define rel_speed_y,skill31;
define rel_speed_z,skill32;
define abs_speed_x,skill33;
define abs_speed_y,skill34;
define abs_speed_z,skill35;
define gravity,skill36;

var friction = 0.7; // Reibung
var set_walk;

function handle_gravity()
{
result = c_trace(vector(my.x,my.y,my.z-15),vector(my.x,my.y,my.z - 1000),use_box | ignore_me | ignore_passable);
if (result > 10) // Abstand grösser als 10 Quants
{
my.force_z -= my.gravity * time_step;
if(result > 100)
{
my.jumping = 2;
}
}
else
{
if(my.jumping != 0 && result < 0) {my.jumping = 0;}
if(my.jumping == 0) // Kein jumping
{
my.force_z = -0.1 * result;
if(key_space == 1)
{
while (key_space == 1){wait (1);} // Solange Taste gedrückt ist kein jumping
my.jumping = 1;
my.force_z = 25; // Sprunghöhe
}
}
if(my.jumping == 2)
{
my.force_z = -0.1 * result;
if(my.jumping == 2 && result <= 0){my.jumping = 0;}
}
}
if(result >= 0 && result <= 10 && my.jumping == 2)
{
my.z -= (result); my.velocity_z = 0; my.force_z = 0;
}
my.velocity_z = time_step * my.force_z + max(1-time_step * friction,0) * my.velocity_z;
my.abs_speed_z = my.velocity_z * time_step; // Absolute Bewegung nach unten
}

action player_init()
{
my.narrow = on;
my.gravity = 6; // Anziehungskraft nach unten
player = me;
while(my != null)
{

update_views();
if(key_s == on)
{
set_walk = 16;
}
else
{
set_walk = 10;
}
my.rel_speed_x = set_walk * (key_cuu - key_cud) * time_step;
//////////////////Player geht vorwärts////////////////////////
if(key_cuu==on)
{
if(key_cuu==on && key_s==on)
{
move_forward += 12*time;
//my.force_x += 16 * time_step;
//c_move(me,vector(16*time,0,0),nullvector,GLIDE);
ent_animate(me,"run",move_forward,anm_cycle);
}
else
{
move_forward += 7*time;
//my.force_x += 10 * time_step;
//c_move(me,vector(10*time,0,0),nullvector,GLIDE);
ent_animate(me,"run",move_forward,anm_cycle);
}

}
//////////////////////////////////////////////////////////////

//////////////////Player dreht sich nach rechts///////////////
if(key_cul==on)
{
my.pan += 10 * time_step;
cam_angle += 10 * time_step;
}
//////////////////////////////////////////////////////////////

//////////////////Player dreht sich nach Links////////////////
if(key_cur==on)
{
my.pan -= 10 * time_step;
cam_angle -= 10 * time_step;
}
//////////////////////////////////////////////////////////////

//////////////////Player gehts rückwärts//////////////////////
if(key_cud==on)
{
move_backward += 3*time;
//my.force_x -= 10 * time_step;
//c_move(me,vector(10*time,0,0),nullvector,GLIDE);
ent_animate(me,"run",move_backward,anm_cycle);
}
//////////////////////////////////////////////////////////////

//////////////Player-Attacke//////////////////////////////////
if(key_w==on)
{
while(attack_mode<100)
{
attack_mode += 6*time;
ent_animate(me,"attack",attack_mode,anm_cycle);
wait(1);
}
attack_mode=0;
}
//////////////////////////////////////////////////////////////

///////////////Keine Taste ist gedrückt///////////////////////
if(key_any==off)
{
ent_blend("stand",stand_mode,100);
stand_mode += 3*time;
ent_animate(me,"stand",stand_mode,anm_cycle);
}
//////////////////////////////////////////////////////////////
my.anim_perc += 10*time;
vec_set(my.abs_speed_x,nullvector);
handle_gravity();
c_move(me,my.rel_speed_x,my.abs_speed_x,glide | use_box | ignore_me);
wait(1);
}
}



Ich hoffe Du kommst damit klar.
Posted By: darci

Re: Steuerung von Player - 12/06/07 20:03

ich hab ein ziemlich komisches problem

also bei mir erkennt er temp garnicht, da kommt immer eine undeclared identifiler meldung

weis einer woran das hängen kann?
© 2024 lite-C Forums