Autor Beitrag
BumBum
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 13.03.09 22:46 
Hallo,

ich habe hier ein Rennen nur das Problem ist, dass die Autos mit dem momentanen Programmtext nur fahren wenn man immer wieder die Taste zum Fahren ('W') drückt.
Wie kann man es nun hinbekommen das das Auto dauerhaft, bis zu einem bestimmten max Geschwindigkeit, beschleunigt und dann wieder aushört wenn man die Taste wieder loslässt ??

ausblenden Delphi-Quelltext
1:
2:
3:
4:
 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
 begin
  if key = ('w'then ???? ;
 end;



im mom ist dies so geregelt (bitte nachfragen wenn ich nich den richtigen Teil herausgenommen habe!!)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TAuto.CalcLoc;
var
   FFahr: Double;
   Sinus, Cosinus: Extended;
begin
     //Fahrzeugdynamik
     Throttle := Throttle * PedalDec;

     if  v > 0 then
        FFahr := FRoll + FLuft
     else
         FFahr := -FRoll - FLuft;

     FLuft := RLuft * Sqr(v);
     FAntrieb := FMax * Throttle ;
     a := (FAntrieb - FFahr) / Masse;

     v := v + a;
     if v < RSpeedMax then v := RSpeedMax;

     //Streckenberechnung
     SinCos(degtorad(dir), sinus, cosinus);

     loc.x := Round(loc.x + v * sinus);
     loc.y := Round(loc.y + v * cosinus);
end;
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 13.03.09 23:03 
Hallo Bum²,

was du suchst ist GetAsyncKeyState. Dieser Funktion kannst du einen virtuellen Tastencode übergeben (für W ist der 57), und bekommst als Rückgabewert zurück, ob die Taste gedrückt ist, kleiner Null heißt gedrückt.

Diese Funktion kannst du einfach in der Hauptschleife abfragen.

Grüße,
Yogu
der organist
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Sa 14.03.09 00:23 
und dann würde ich es wie folgt aufbauen:

- du gibst deinem Auto eine Variable: Speed und Acceleration (Geschwindigkeit und Beschleunigung)
- wenn die Taste gedrückt ist, dann kannst du die Beschleunigung auf z.B. 10 px pro sekunde legen. Beim nächsten mal
Geschwindigkeit berechnen kannst du dann inc (Speed,acceleration); benutzen.
- Wenn die TAste nicht gedrückt ist, dann ist acceleration halt 0 und die Geschwindigkeit wird nicht erhöht.
- Wenn du möchtest, dass bei "nicht gedrückt" langsamer wird (z.B. wegen Luftwiderstand), dann mach dir ne Konstante
(z.B. resistance := -5). Bei jedem neu berechnen musst du das dann noch abziehen (als Operation nimmst du addieren,
weil der Wert ja schon negativ ist....). inc(speed,acceleration+resistance);
- Achte nur darauf, dass der Widerstand nicht größer ist als die maximale Beschleunigung....sonst kommst du nie vom
Fleck, bzw. bewegst dich wegen der (dann doch recht simplen) Programmierung nach hinten :D

_________________
»Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin