WinFormsプログラムがあります。ここでは、上、下、左、右を押すと移動する特定のアニメーションオブジェクトがあります。オブジェクトの動きは30msごとに呼ばれるタイマーの中でアニメーション化されます。タイマーはKeyDownイベントで開始し、KeyUpイベントで停止します。System.Timers.Timer別のキーがリリースされた後に起動する問題
したがって、たとえば左を押したまま、左のキーを放して別のキーを押した直後に、その方向に移動する前にわずかな休止(約0.5秒)があります。 その問題は表示されません、もし私が左を保持すると、それをリリースし、少し待ってください。 then右を押してください。そのような場合は、すぐに右に移動します。 私はまだ左を保持している間、私は左を押しているし、右を押し続けている場合、それも表示されません。その場合、すぐに右に動き始めるでしょう。 問題は、キーを離してすぐに別のキーを押すと表示されます。
KeyDownイベント:
private void form_KeyDown(object sender, KeyEventArgs e)
{
k = 0;
watch.Start();
if (e.KeyCode == Keys.Left)
{
direction = MOVE_LEFT;
}
else if (e.KeyCode == Keys.Right)
{
direction = MOVE_RIGHT;
}
else if (e.KeyCode == Keys.Up)
{
direction = MOVE_UP;
}
else if (e.KeyCode == Keys.Down)
{
direction = MOVE_DOWN;
}
timerMove.Start();
}
KeyUpイベント:
private void form_KeyUp(object sender, KeyEventArgs e)
{
timerMove.Stop();
}
Timerイベント(アニメーションの動き)
void charMovement(object sender, System.Timers.ElapsedEventArgs e)
{
if (direction == MOVE_LEFT)
{
timerMove.Interval = 30;
CharSize(11, 15); //mainChar.Size = new System.Drawing.Size(11, 15);
//code for movement
}
else if (direction == MOVE_RIGHT) //... etc. etc.
WinFormsアプリケーションでは、System.Timers.Timerではなく、System.Windows.Forms.Timerを使用する必要があります。どのようにあなたのアニメーションを台無しにするのですか? – SLaks
私のアニメーションが壊れてしまいますので使用できません。私はすでにそれを試してみましたが、stackoverflowの人々は代わりにTimers.Timerを使用するように私に言った。少なくとも私のアニメーションはうまくいきました。唯一の問題は、私が上に述べた問題です。 – NoelAramis
どのようにアニメーションを台無しにするのですか? – SLaks