glutKeyboardFunc
関数パラメーターとして使用される次の関数があります。
void handleKeypress(unsigned char key, //The key that was pressed
int x, int y) { //The current mouse coordinates
switch (key) {
case 27: //Escape key
exit(0); //Exit the program
}
if (key == 'a')
{
moveCircleLeft(0);
}
if (key == 'w')
{
moveCircleUp(0);
}
if (key == 's')
{
moveCircleDown(0);
}
if (key == 'd')
{
moveCircleRight(0);
}
}
ここで、関数がmoveCircleLeft
どのように記述されているかの例を示します。moveCircle
void moveCircleLeft(int x)
{
characterX = characterX - 0.1;
glutPostRedisplay();
x++;
if (x < 10)
{
glutTimerFunc(10, moveCircleLeft, x);
}
}
他のmoveCircle
関数は同様に機能し、4 つの関数の唯一の違いは、プラスがマイナス 0.1 であるか、または とはcharacterY
対照的であるかcharacterX
です。
さて、問題は次のとおりです。
すべての方向が正しい方向に動いていますが、キーを押しようとすると、キャラクターの動きに遅延/一時停止があります。したがって、d キー (moveCircleRight) だけを押すと、少し右に移動し、少しの間停止してから、一時停止することなく一定の速度で画面をその方向に移動します。次に、別のキーに変更すると、方向を変更する前に少し一時停止し、その方向に一定の速度で移動します。
これに関する提案をいただければ幸いです。