[VB.NET -> C#]Problème avec les KeyPress

Squall2x - 5 avril 2013 à 23:38
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 7 avril 2013 à 16:59
Bonjour, je suis débutant en c# et j'ai créé un petit jeu dans lequel je dois déplacer mon personnage, j'utilise l’événement KeyPress,
seulement, lorsque je reste appuyé sur la touche de déplacement, le personnage se déplace d'un cran. Il y a alors un temps d'attente, et il se déplace ensuite normalement. Il agit de la même manière que si je reste appuyé sur une lettre dans un traitement de texte.
J'aimerai savoir s'il est possible de déplacer mon personnage de façon uniforme, merci beaucoup.
Voici mon code :
        private void Map_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Z)
            {
                barre.deplacer_barre('Z');
            }
            if (e.KeyChar == (char)Keys.S)
            {
                barre.deplacer_barre('S');
            }
            this.Controls.Add(barre.ImgBarre);

1 réponse

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
7 avril 2013 à 16:59
Salut,

c'est purement le comportement des messages windows, tu ne pourras pas le changer sans changer la structure de ton appli.

La base structurelle d'un "jeu" est une boucle infinie temporisée par le "framerate" (qui donne la vitesse générale des anims).

En gros :

// 1 flag pour savoir si la touche Z est pressée
private bool _keyZPressed;

// L'event KeyPress ne fait que activer le flag
private void Map_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Z)
        _keyZPressed = true;
}

// L'event keyUp désactive le flag
private void Map_KeyUp(object sender, KeyPressEventArgs e)
{
    _keyZPressed = false;
}

// Dans la boucle du jeu (peut etre un Timer dans ton cas)
{
    if( CALCUL_FRAMERATE()==true )
    {
        if( keyZPressed )
        {
            barre.deplacer_barre('Z');
            this.Controls.Add(barre.ImgBarre);
        }
    }
}


bye...
0
Rejoignez-nous