J'ai un programme WinForms, dans lequel j'ai un objet animé qui se déplace lorsque j'appuie sur Haut, Bas, Gauche et Droite. Le mouvement de l'objet est animé à l'intérieur d'une minuterie, appelée toutes les 30 ms. La minuterie commence à l'événement KeyDown et s'arrête sur l'événement KeyUp. Donc, si je tiens par exemple à gauche, et immédiatement après avoir relâché la touche gauche et appuyé sur une autre, il y a une petite pause (environ une demi-seconde), avant qu'elle ne bouge dans cette direction. Ce problème n'apparaît pas, si je me tiens à gauche, le relâcher, et attendre un peu, et puis appuyez sur droite. Dans ce cas, il se déplacerait immédiatement à droite. Il n'apparaît pas non plus si je tiens à gauche, puis je commence à me tenir à droite, alors que je suis toujours à gauche. Dans ce cas, il commencerait à bouger immédiatement aussi. Le problème n'apparaît que lorsque je relâche la touche et que j'appuie immédiatement sur une autre.System.Timers.Problème de démarrage après la sortie d'une autre clé
événement 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();
}
événement KeyUp:
private void form_KeyUp(object sender, KeyEventArgs e)
{
timerMove.Stop();
}
événement Timer (mouvement d'animation)
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.
Dans les applications WinForms, vous devez utiliser un 'System.Windows.Forms.Timer', pas un' System.Timers.Timer'. Comment ça gâche votre animation? – SLaks
Je ne peux pas l'utiliser, car cela dérange mon animation. Je l'ai déjà essayé, mais les gens de stackoverflow m'ont dit d'utiliser le Timers.Timer à la place. Au moins mon animation fonctionne bien maintenant, le seul problème que je semble avoir est celui que j'ai dit ci-dessus. – NoelAramis
Comment ça gâche votre animation? – SLaks