Entwickler-Ecke
Sonstiges (Delphi) - Wie kann man dauerhaft Gasgeben? (Rennen)
BumBum - Fr 13.03.09 22:46
Titel: Wie kann man dauerhaft Gasgeben? (Rennen)
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 ??
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!!)
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 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;
SinCos(degtorad(dir), sinus, cosinus);
loc.x := Round(loc.x + v * sinus); loc.y := Round(loc.y + v * cosinus); end; |
Yogu - 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!