Ich mache ein einfaches Spiel und eines der Probleme, auf die ich gestoßen bin, ist die nervige Verzögerung beim kontinuierlichen Drücken einer Taste.
Wenn ich zum Beispiel (für eine sehr lange Zeit) drücke Up, bewegt sich mein Objekt um 1 Einheit nach oben, nicht nach oben (für ca. 1 Sekunde) und bewegt sich dann kontinuierlich um 1 Einheit nach oben (ohne Verzögerungen).
Derzeit verwende ich dies, um das Objekt (SDL2) zu verschieben:
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_UP:
//Move object 1 unit up
break;
//Other unrelated things omitted
}
break;
//Omitted other cases
}
}
Was ich haben möchte, ist, die Verzögerung zu entfernen, damit sich das Objekt sofort Upsehr schnell bewegen kann. Gibt es eine Möglichkeit, dies zu tun?
while key UP is down move 30 units per second
- und pro Sekunde nur dann sinnvoll, wenn Sie eine messbare Zeit zwischen Taste runter und rauf haben - normalerweise mehr als ein Bild.Eine alternative Möglichkeit (Joshs Ansatz ist auch großartig!) Besteht darin, einen Booleschen Wert einzurichten
SDL_KEYDOWN
und möglicherweise auch alle wiederholten Schlüsselereignisse zu ignorieren. Dies können Sie tun, indem Sie dasrepeat
Mitglied des Schlüsselereignisses überprüfen .Dann könnten Sie Ihren eigenen Timer implementieren, der nichts Besonderes sein muss, und die Tastenwiederholung selbst implementieren. Sie können die Aktion entweder direkt vom Timer aus auslösen oder sogar ein
SDL_KEYDOWN
Ereignis generieren und die Lösungen vereinheitlichen.quelle