Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
761 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Question sur les define

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question sur les define

n°1102736
bonyama
Posté le 31-05-2005 à 12:15:12  profilanswer
 

Bonjour à tous!
 
J'ai une petite question sur les defines:
 
Comme dans tous les jeux lorsque l'on presse sur une touche, on récupère le code de la touche appuyée.
J'ai donc créé un define pour chaque action  
exemple :  

Code :
  1. #define AVANCE 35
  2. if (keyCode == AVANCE )


La condition est vérifié si le code touche est égale a 35. Jusque la aucun problème ;) mais j'essaie d être le plus clair possible.
 
On a donc pour les téléphones portables  
#define KUP2 Canvas.KEY_NUM2
#define KUP3 Canvas.KEY_NUM3.  
 
Pour des raisons d'ergonomie et de facilité on refait un define : #define PAUSE KUP2  
Et donc le code ressemble a ceci (en incluant les define) :

Code :
  1. if (keycode == PAUSE)


Si le joueur appuie sur la touche 2 alors la condition est vérifiée.
Maintenant mon problème est le suivant : je veux que deux touches aient la meme action.
J'aimerais pouvoir faire  

Code :
  1. #define PAUSE KUP2
  2. #define PAUSE KUP3


et que si le joueur appuie sur la touche 2 cela vérifie la condition du "if". Mais forcément cela n'est pas possible. La solution

Code :
  1. #define PAUSE1 KUP2
  2. #define PAUSE2 KUP3
  3. if (keycode == PAUSE1 || keycode == PAUSE2)


n'est pas une solution au final car je dois pouvoir rajouter autant de touche possible sur une meme action :(
 
SI quelqu'un aurait une idée ;))
 
merci de m'avoir lu et bonne journée


Message édité par bonyama le 31-05-2005 à 12:32:49
mood
Publicité
Posté le 31-05-2005 à 12:15:12  profilanswer
 

n°1102800
IrmatDen
Posté le 31-05-2005 à 12:53:07  profilanswer
 

Salut,
Plutôt que de passer par des defines, tu devrais lier tes touches à des actions.
Par exemple, tu as un enum pour chacun d'eux, et tu les lies par une map.

n°1103004
nathan_g
Posté le 31-05-2005 à 15:21:28  profilanswer
 

Avec Qt, il n'y aurait pas aussi des possibilités similaires ?

n°1103016
IrmatDen
Posté le 31-05-2005 à 15:30:09  profilanswer
 

:heink:  
Il n'a pas parlé de Qt ?!

n°1103055
bonyama
Posté le 31-05-2005 à 15:57:39  profilanswer
 

ouaip
 
déjà merci pour vos reponses :)
ensuite le probleme cest qu'il s'agit de coder ceci en java. (C'est du preprocess donc les includes sont utils ;) )
Et donc je crois que ca empeche de faire ceci :
"Plutôt que de passer par des defines, tu devrais lier tes touches à des actions.
Par exemple, tu as un enum pour chacun d'eux, et tu les lies par une map." Tu parlais de pointeur sur fonction non ?
 
Si vous avez d'autres idées "your welcome" !

n°1103129
IrmatDen
Posté le 31-05-2005 à 16:40:23  profilanswer
 

Si tu veux du Java, c'est pas la bonne sous-cat...
 
Pour te répondre, je ne parlais pas de pointeurs sur fonctions, bien que ce soit une solution...
 
Je pensais plutôt à quelque chose du type

Code :
  1. //Définition des types
  2. enum KeyPad
  3. {
  4.    KP_Key1,
  5.    KP_Key2,
  6. [...]
  7. };
  8. enum Action
  9. {
  10.    Act_Advance,
  11.    Act_Pause,
  12. [...]
  13. };
  14. typedef map<KeyPad, Action> KeyBindings;
  15. // Initialisation des liens touches <-> actions
  16. KeyBindings keyBinds;
  17. keyBinds[KP_Key2] = Act_Pause;
  18. [...]
  19. // Utilisation
  20. if( keyBinds[keyCode] == Act_Pause )
  21.    // mettre en pause

n°1103282
fra0
Posté le 31-05-2005 à 18:06:52  profilanswer
 

il y a même une solution en temps constant,
(peut être au prix d'un re-étalonage des codes)
 

Code :
  1. long map[MAX_KEYS];
  2. #define setAction(key,action) map[key]=action
  3. #define getAction(key) map[key]


 
ensuite quelque part :
 

Code :
  1. setAction('p',PAUSE);
  2.     setAction('P',PAUSE);
  3.     setAction(' ',PAUSE);


 
et autre part
 

Code :
  1. if(getAction(keycode)==PAUSE)
  2.    {
  3.        // ...
  4.    }

n°1104748
IrmatDen
Posté le 01-06-2005 à 23:44:29  profilanswer
 

Peux-tu me dire ce que tu apelles une "solution en temps constant" ?
D'après ce que je vois de ton code, tu as remplacé 2 opérations par des  defines (pour rester C++ on peut en faire des fonctions inline ?). Pourquoi ?

n°1104801
fra0
Posté le 02-06-2005 à 03:44:29  profilanswer
 

en général, le temps d'accès de std::map n'est pas constant,
certaines clés sont retrouvées plus rapidement que d'autres,
ce qui n'est peut être pas souhaitable pour un jeu.
 
Après pour le défine... le topic était déjà tellement absurde.

n°1104811
elianor
bannie 17 fois
Posté le 02-06-2005 à 08:15:26  profilanswer
 

fra0 a écrit :

en général, le temps d'accès de std::map n'est pas constant,


 
 
source ?


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
mood
Publicité
Posté le 02-06-2005 à 08:15:26  profilanswer
 

n°1105575
fra0
Posté le 02-06-2005 à 15:36:12  profilanswer
 

tree.cc

n°1105606
elianor
bannie 17 fois
Posté le 02-06-2005 à 15:42:37  profilanswer
 

url ? (des tree.cc, j'en ai un paquetà


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
n°1105617
fra0
Posté le 02-06-2005 à 15:45:39  profilanswer
 

Code :
  1. map<int,int> toto;
  2.     toto[7]=3;
  3.     toto[42]=1;
  4.     int d=toto[42]; // lance ton debugger ici

n°1107716
IrmatDen
Posté le 03-06-2005 à 23:07:50  profilanswer
 

En quoi remplacer par des defines est-il meilleur ? A la compilation, l'appel de la macro est remplacé par son code, non ? Si c'est le cas, il ne devrait pas y avoir d'écart de performance ?
J'espère pas être trop lourd, mais j'aimerais vraiment comprendre ça...

n°1107862
fra0
Posté le 04-06-2005 à 01:32:50  profilanswer
 

// parfois les define sont plus lents, ce bout de code (mauvais)

Code :
  1. int X=1;
  2. for(int Y=0;Y<10;Y++)
  3. {
  4.     fois10(X);
  5.     ::Sleep(X);
  6. }


 
// s'exécute en 10ms lorsque

Code :
  1. void fois10(int Z)
  2. {
  3.     Z*=10;
  4. }


 
// et plus de 4 mois* lorsque

Code :
  1. #define fois10(Z) Z*=10;


 
ça devrait te mettre sur la piste


Message édité par fra0 le 04-06-2005 à 01:49:54
n°1108258
IrmatDen
Posté le 04-06-2005 à 21:10:34  profilanswer
 

Maintenant que c'est le week-end, je vais pouvoir faire quelque tests... Merci des pistes.

n°1108264
Joel F
Real men use unique_ptr
Posté le 04-06-2005 à 21:23:11  profilanswer
 

les define ne sont pas typesafe, ca c'est vraiment mal !

n°1108292
IrmatDen
Posté le 04-06-2005 à 21:56:46  profilanswer
 

D'où ma question sur l'utilisation de fonctions inline.
Je vais essayer aussi avec ça...
Mais sans essayer, je ne comprends toujours pô :( Même après, j'ai bien peur de ne pas en comprendre l'origine...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Question sur les define

 

Sujets relatifs
question communication entre formj ai plein de question C# et .net et portabolité
question existentielle sur la maniere de structurer mon xmlQuestion : pro*C / html
Question sur PHP/Flash MXquestion de débutant (having)
[java] SDK, question con : il est où javac?[MySQL] Question sur les dates et sur 1 requete SQL
DEFINE ensemblesQuestion sur une RegEx.
Plus de sujets relatifs à : Question sur les define


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR