Autor |
Beitrag |
Moritz M.
      
Beiträge: 1672
|
Verfasst: So 15.12.02 11:29
Hi
Ich habe ein pong spiel, einen balken kann man bewegen. Nur leieder geht die Tastatur sehr langsam. Kann man das umstellen?
|
|
lightning_in_the_dark
Hält's aus hier
Beiträge: 6
|
Verfasst: So 15.12.02 11:34
Hi Leuts
hmm.. Du meinst, dass sich der Balken sehr langsam bewegt, wenn du eine Taste gedrückt hälst. Ich würde pro "Zyklus" einfach mehr Pixel zur Position adieren.
MfG
lightning_in_the_dark
|
|
DeCodeGuru
      
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: So 15.12.02 11:35
Start -> Einstellungen -> Systemsteuerung -> Tastatur -> Wiederholrate
Ich hoffe, das hilft.
_________________ Viele Grüße
Jakob
|
|
Moritz M. 
      
Beiträge: 1672
|
Verfasst: So 15.12.02 11:49
Das wäre auch eine Lösung, nbur müsste das der User selbst einstellen. Ich suche eine Lösung, die nur in meinem Prog zählt
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: So 15.12.02 20:32
uiii, das geht glaub' ich irgendwie mit DirectInput.
Aber wie wär's denn mit ein paar Variabeln? Im KeyDown wird dann die Variable gesetzt, je nachdem, welche Taste gedrückt wurde. Dann guckst du in deiner Endlosschleife, die auch den Pong-Ball bewegt (der GLCadencer  , ich weiß was gemeint ist) ob die links- oder die rechts-variable gesetzt ist. Dementsprechend bewegst du dann das Paddle um eine konstante Anzahl an Pixeln (per Vektor). So einfach geht das auch ohne DirectInput.
Auf Wunsch gibt's auch ein Codebeispiel...
Tschüß
Thomas
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
Moritz M. 
      
Beiträge: 1672
|
Verfasst: So 15.12.02 20:39
Ein Codebespiel wäre nett(Ich nehm nen Timer  )
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: So 15.12.02 20:49
also ein Cadencer wäre immer von Vorteil. Der hat auch gleich 'n DeltaTime drin....
codebeispiel:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var: Direction: set of (left, right);
procedure KeyDown; begin if Key = VK_Left then Direction := left else if Key = VK_Right then Direction := right; end;
procedure CadencerProgress; begin if Direction = left then Paddle.bewege_nach_links else if Direction = right then Paddle.bewege_nach_rechts; end; |
Der Code ist ohne nachgucken und ausprobieren geschrieben wurden, die Prozeduren sind cniht richtig deklariert, die Aufrufe teilweise auch falsch, aver der Sinn, der dahinter steckt, dürfte klar sien.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Di 17.12.02 07:49
Hi,
du kannst die Tastatur ganz einfach so schnell machen wie es die CPU zulässt..
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var Keys: Array[0..255] of Boolean;
procedure OnKeyDown... begin Keys[Key]:=true; end;
procedure OnKeyUp... begin Keys[Key]:=false; end;
procedure OnTimer... //TTimer.OnTimer Event begin if Keys[VK_LEFT] then GoLeft; if Keys[VK_RIGHT] then GoRight; //blbla... dein Code halt *g* end; |
Den Timer Intervall kannst du jetzt einfach auf 1ms setzen oder was du halt gern willst... wenn die tastatur langsam reagierne soll halt auf 100... versuch's einfach
Au'revoir,
Aya~
|
|
Moritz M. 
      
Beiträge: 1672
|
Verfasst: Di 17.12.02 08:00
Really thanks!! 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.12.02 09:37
Aya hat folgendes geschrieben: |
du kannst die Tastatur ganz einfach so schnell machen wie es die CPU zulässt..
|
Das ist falsch! Wenn du mit einem Timer arbeitest kannst du es nur so schnell machen wie die Auflösung des Timers vom Betriebssystem ist und die ist vom OS abhängig. Wiondows2000 hat zum Beipsiel eine höhere Auflösung wie Windows 9x. Bei einem von beiden liegt die mindest Auflösung bei 50 ms, wenn du jetzt 1 ms angibts, wird im günstigsten Falls ein Timer-Ereigniss auch nur alle 50 ms ausgelöst. Im günstigesten Fall, weill nicht sicher ist, dass deine Anwendung auch alle 50 ms dazu kommt die WM_TIMER Nachricht auch alle 50 ms abzuholen. Braucht die Anwendung für die Nachrichte, die davor ligen länger kann es passieren, das deinen Anwendung erst nach 100 ms oder gar erst 200 ms dazu kommt die Timer Nachricht abzuholen.
|
|
enigma
      
Beiträge: 18
|
Verfasst: Di 17.12.02 13:43
Wenn du einen Timer nehmen willst würde ich den DXTimer aus DelphiX nehmen.
Den stellst du auf Null und dann läuft der Code wirklich so schnell wie die CPU es zulässt
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Di 17.12.02 16:00
oder den TGLCadencer. Ist ja im Prinzip auch nur ein Timer.
Aber ich finde Ayas Lösung für nur zwei Tasten ein bisschen zu kompolex. Wenn noch mehr Tasten dazukommen, würde es vielleicht was bringen, aber ich würde für 2 Tasten trotzdem einfach 2 Boolean-Variablen (bzw ein Set) nehmen, weil's übersichtlicher ist (meiner Meinung nach). Nachher wird dann eifnach nur abgefragt, welche Richtung "true" ist und schon hat man's.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
Moritz M. 
      
Beiträge: 1672
|
Verfasst: Di 17.12.02 20:10
Ich habs jetzt mit nem Timer und allen tasten gemacht, weil ich noch mher Funktionen hab, die öfters aufgerufen werden müssen.
Und es geht sehr gut!!
Really Thanks!! 
|
|