Saya membuat game sederhana, dan salah satu masalah yang saya temui adalah keterlambatan yang mengganggu ketika menekan tombol terus menerus.
Jadi pada dasarnya, ketika saya menekan (untuk waktu yang sangat lama) misalnya Up, objek saya akan bergerak 1 unit ke atas, tidak bergerak (sekitar 1 detik), dan kemudian bergerak terus menerus 1 unit ke atas (tanpa penundaan).
Saat ini, saya menggunakan ini untuk memindahkan objek (SDL2):
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
}
}
Yang ingin saya miliki adalah menghapus penundaan, sehingga objek dapat segera bergerak Upsangat cepat. Apakah ada cara untuk melakukan ini?
while key UP is down move 30 units per second
- dan per detik hanya masuk akal bila Anda memiliki waktu yang terukur antara tombol turun dan naik - biasanya lebih dari satu bingkai.Cara alternatif (pendekatan Josh juga hebat!) Adalah dengan memasang boolean
SDL_KEYDOWN
, dan mungkin juga mengabaikan semua peristiwa penting yang berulang. Itu bisa Anda lakukan dengan memeriksarepeat
anggota acara utama.Kemudian Anda bisa menerapkan timer Anda sendiri, yang tidak harus mewah, dan menerapkan pengulangan kunci Anda sendiri. Anda bisa memicu tindakan langsung dari penghitung waktu, atau bahkan menghasilkan
SDL_KEYDOWN
acara, dan menyatukan solusinya.sumber