const char IsPressed = 1; // 1
const char WasHeldDown = 2; // 10
const char IsFirstPress = 4; // 100
char* keystates[256];
Class::CalculateKeyStates()
{
for(int i = 0; i < 256; ++i)
{
if(this->IsDown(i))
{
keystates[i] |= IsPressed; // turn on
if(keystates[i] & WasHeldDown)
{
//keystates[i] |= IsFirstPress;
keystates[i] &= ~IsFirstPress; // turn off
}
else
{
keystates[i] |= WasHeldDown + IsFirstPress; // Turn on
}
}
else
{
keystates[i] = 0; // Turn ALL off
}
}
}
Cette fonction serait une fonction membre d'une classe, classe. L'autre fonction membre, IsDown, renvoie une valeur true si la clé en question est en panne et false si elle ne l'est pas.Ma logique de programmation est-elle correcte ici?
Pouvez-vous envisager une amélioration supplémentaire de cette fonction?
Merci
EDIT:
Je vais développer un peu à ce qui se fait pourquoi. C'est une modification d'un bit de code qui fonctionne à travers un tableau keyStates (qui était une structure de trois booléens) en définissant IsPressed sur false pour toutes les clés. puis, à nouveau, la valeur Ispressed est attribuée à la valeur de this-> IsDown, puis une troisième fois en vérifiant si la clé a été maintenue, si elle n'a plus la première pression, définissez-la sur false. si elle n'était pas maintenue enfoncée, appuyez d'abord sur pour confirmer et elle était également vraie, donc la prochaine fois, elle est signalée comme ayant été tenue.
EDIT2:
a ajouté quelques commentaires à code et corriger une ligne
Ajouter des commentaires? À propos de ce que vous essayez de faire et pourquoi vous le faites de cette façon, et quelles sont les entrées et les sorties de votre fonction. – mouviciel
Un peu hors sujet, mais de nombreuses API de clavier sont basées sur des événements, auquel cas vous pouvez simplement écouter les événements clés et mettre à jour le modèle dans ces événements. –
@mouviciel, alors que je ne dirais pas que les commentaires ne sont pas du tout nécessaires. Ce code est assez explicite n'est-ce pas? clairement, il n'y a pas d'E/S. J'accepterais que le bitwise puisse faire des commentaires, sauf qu'un programmeur devrait probablement être capable de savoir ce que fait une opération au niveau du bit. – thecoshman