Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.03.2007, 23:41

Tastatur abfrage verzögern

Hallo,

ich habe einen Tetrisklon programmiert der soweit funktioniert nur mit der Steuerung habe ich ein bissel Probleme. Wenn ich z.B. die Taste zum drehen eines Blocks drücke und nur eine millisekunde zu lang auf der Taste bleibe dreht der Block sich um 180 und nicht nur um 90 grad. Ich hoffe ihr versteht was ich meine. Kurz gesagt die steuerung ist zu empfindlich. Ich habe schon versucht nachdem eine Taste gedrückt wurde mit einer while schleife das spiel für eine kurze Zeit anzuhalte, dieser versuch war jedoch ohne erfolg.

Ich würde mich über eure Hilfe sehr freuen.

Gruß Markus

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

17.03.2007, 23:45

Wie wärs mal mit paar mehr Infos?
Arbeitest du mit Console, WinAPI, Zusatzlibs wie DX, OGL oder SDL - mit welchen Mitteln fragst du die Tastendrücke ab?

3

17.03.2007, 23:47

Also ich benutze dirextX für die Grafik und Steuerung und das alles unter Windows versteht sich

4

18.03.2007, 00:00

Behandle die Tastaturereignisse doch einfach bei der WM_KEYDOWN Nachricht des Fensters.
Mein Projekt: Rise of the Sylvan

Sheddex

unregistriert

5

18.03.2007, 00:11

Naja, ich mach das ungefähr so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (Counter == 0.0f)
{
   if (Taste wird gedrückt)
   {
      //Die Tastatur wird 0,1 Sekunde lang blockiert

      Counter = 0.1f;
   }
}

else
{
   Counter -= Time;

   if (Counter < 0.0f)
      Counter = 0.0f;
}

6

18.03.2007, 00:42

ich versteh das was du machst nicht so richtig. Ich habe als ich das mit der while schleife machte, das spiel nach dem eine Taste gedrückt wurde, eine sek. angehalten (nur mal so zum Testen). Was daraus folgte war das wenn ich die taste los ließ der block sich weiter drehte oder auch bewegte ohne das die Taste gedrückt war. Was ich daraus schlussfolgere ist das die gedrückten Tasten im System hinterlegt werden (wo auch immer) und vom Spiel abgefragt werden. Also muss ich es irgendwie hinbekommen das das system nur z.B. alle 100 millisekunden auf eine Tasteneingabe reagiert.

Wenn ich falsch liege bitte sagen ;)

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

7

18.03.2007, 08:47

Du kannst auch einen bool array für alle Tasten anlegen die du benutzt. Jedes mal wenn die Taste gedrückt wird und der Wert auf false steht, setzt du den entsprechenden array auf true und machst die Aktion die durch die Taste ausgelöst werden soll. Wenn die Taste losgelassen wird (nicht gedrückt ist) setzt du den wert auf false.

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

8

18.03.2007, 09:55

implementier dir einfach ne Keyup funktion...

9

21.03.2007, 22:24

Hallo,

danke euch allen für die Antworten. Habe den Ansatz von DragonFlame genutzt und alles läuft jetzt nach meinen Vorstellungen.

Gruß Markus

Werbeanzeige