|
|
Geschw. per Tastendruck festlegen, aber wie ?
#272567
06/18/09 17:39
06/18/09 17:39
|
Joined: Apr 2005
Posts: 274 austria
Ascalon
OP
Member
|
OP
Member
Joined: Apr 2005
Posts: 274
austria
|
hallo ! Wie mache ich das am besten, wenn ich die Geschwindigkeit per Tastendruck auf bestimmte Geschwindigkeiten festsetzten möchte. Also bei Taste 1 auf 25% der Geschwindigkeit, bei Taste 2 auf 50% der Geschw. setzen usw. Die Geschwindigkeit sollte langsam diesen Wert erreichen. Ich schaffe das mit meinem Code nur, wenn ich die Taste "1" gedrückt halte. Möchte aber nur einmal kurz drauf drücken. while(1)
{
if(key_w == 1 && temp_x <= max_speed)
temp_x += 1 * time_step;
if(key_s == 1 && temp_x >= 0)
temp_x -= 1 * time_step;
if(key_1)
temp_x = max_speed*0.25;
if(key_2)
temp_x = max_speed*0.5;
if(key_3)
temp_x = max_speed*0.75;
if(key_4)
temp_x = max_speed;
Raumschiff_speed.x = temp_x;
Raumschiff_speed.y = 0;
Raumschiff_speed.z = 0;
Raumschiff.pan -= mouse_force.x * 5 * time_step;
c_move(my,Raumschiff_speed,nullvector, IGNORE_PASSABLE | GLIDE);
wait(1);
} ich weiß, dass das momentan falsch ist, aber wie muss ich den code ändern ? hab folgendes probiert if(key_1 == 1 && temp_speed != max_speed*0.25)
temp_x += 1*time_step;
|
|
|
Re: Geschw. per Tastendruck festlegen, aber wie ?
[Re: Ascalon]
#272675
06/19/09 09:13
06/19/09 09:13
|
Joined: Apr 2005
Posts: 274 austria
Ascalon
OP
Member
|
OP
Member
Joined: Apr 2005
Posts: 274
austria
|
|
|
|
Re: Geschw. per Tastendruck festlegen, aber wie ?
[Re: Ascalon]
#272793
06/19/09 20:10
06/19/09 20:10
|
Joined: Jun 2006
Posts: 2,640 Earth
Germanunkol
Expert
|
Expert
Joined: Jun 2006
Posts: 2,640
Earth
|
tu diese zeile vor die funktion: var speedGoal = 0; und dann ersetze das: if(key_w == 1 && temp_x <= max_speed) temp_x += 1 * time_step; if(key_s == 1 && temp_x >= 0) temp_x -= 1 * time_step; if(key_1) temp_x = max_speed*0.25; if(key_2) temp_x = max_speed*0.5; if(key_3) temp_x = max_speed*0.75; if(key_4) temp_x = max_speed;
durch das: if(key_1) speedGoal = max_speed*0.25; if(key_2) speedGoal = max_speed*0.5; if(key_3) speedGoal = max_speed*0.75; if(key_4) speedGoal = max_speed;
temp_x += clamp(speedGoal-temp_x,-1,1)*time_step;
Erklärung: Die ersten Zeilen setzen die geschwindigkeit, die das ding anpeilen soll. Egal ob was gedrückt wird oder nicht wird sich mit der letzten zeile das temp_x dem speedGoal annähern. Wenn speedGoal zum beispiel 10 ist und temp_x = 0 dann ist 10-0 = 10, da es mit clamp zwischen -1 und 1 gehalten wird ist es also hier 1. das multipliziert mit time_step ist genau das was du vorher in der zeile: temp_x += 1 * time_step; gemacht hast. Wenn jetzt temp_x im moment größer als speedGoal ist (temp_x = 5 und speedGoal = 2) dann ist speedGoal-temp_x = 2 - 5 = -3 -3 wird durch den clamp befehl zu -1 und das heißt dann dass -1*time_step dazuadiert wird. Da das negativ ist wird also die geschwindigkeit geringer.
Achtung: du darfst hier temp_x nicht außerhalb der funktion ändern, es sei denn du weißt was du damit machst. Andere funktionen sollten also jetzt nicht mehr temp_x als temporären vektor benutzen, falls du das grade tust.
Hoffe das hilft...
~"I never let school interfere with my education"~ -Mark Twain
|
|
|
Re: Geschw. per Tastendruck festlegen, aber wie ?
[Re: Germanunkol]
#272866
06/20/09 07:02
06/20/09 07:02
|
Joined: Apr 2005
Posts: 274 austria
Ascalon
OP
Member
|
OP
Member
Joined: Apr 2005
Posts: 274
austria
|
Wow !! Vielen, vielen dank ! Funktioniert super und genau so wie ich es mir vorgestellt habe ! Danke für die Hilfe. Wenn ich die Geschwindigkeit zusätzlich noch mit Taste w und s ändern möchte, dann muss ich eine andere Variable wählen als temp_x oder ? Weil zusammen mit dem geht das dann nicht mehr:
temp_x += 0.5 * (key_w - key_s) * time_step;
temp_x = clamp(temp_x,0,max_speed);
|
|
|
Re: Geschw. per Tastendruck festlegen, aber wie ?
[Re: Ascalon]
#272916
06/20/09 13:59
06/20/09 13:59
|
Joined: Jun 2006
Posts: 2,640 Earth
Germanunkol
Expert
|
Expert
Joined: Jun 2006
Posts: 2,640
Earth
|
wenn du var speedGoal wirklich vor der funktion hast (bzw vor allen funktionen, die es benutzen) kannst du bei deinem: temp_x += 0.5 * (key_w - key_s) * time_step; temp_x = clamp(temp_x,0,max_speed);
einfach temp_x durch speedGoal ersetzen, so: speedGoal += 0.5 * (key_w - key_s) * time_step; speedGoal = clamp(speedGoal,0,max_speed);
Dann legen die tasten 1-4 weiter feste geschwindigkeiten fest und w und s ändern diese geschwindigkeit noch dazu. Vorteil ist dass egal zu was du speedGoal setzt, es immer gleich beschleunigt und abbremst bis es bei genau dieser geschwindigkeit angekommen ist.
temp_x kannst du eigentlich ganz weg lassen, wenn du statt diesen beiden zeilen: temp_x += clamp(speedGoal-temp_x,-1,1)*time_step; Raumschiff_speed.x = temp_x;
nur das hier machst: Raumschiff_speed.x += clamp(speedGoal-Raumschiff_speed.x,-1,1)*time_step;
dann brauchst du temp_x nicht mehr. Musst du aber nicht machen.
Last edited by Germanunkol; 06/20/09 13:59.
~"I never let school interfere with my education"~ -Mark Twain
|
|
|
Re: Geschw. per Tastendruck festlegen, aber wie ?
[Re: Ascalon]
#273068
06/21/09 09:17
06/21/09 09:17
|
Joined: Jun 2006
Posts: 2,640 Earth
Germanunkol
Expert
|
Expert
Joined: Jun 2006
Posts: 2,640
Earth
|
=D. Danke für das Lob. Vielleicht iiiiirgendwann mal, wenn ich die zeit finde... Schön dass es jetzt geht!
~"I never let school interfere with my education"~ -Mark Twain
|
|
|
|