Jipicad Posté(e) le 6 juillet 2009 Posté(e) le 6 juillet 2009 Bonjour a tous Voila mon probleme j'ai codé un jeux de pacman dans autocad et j'utilise pour le controle des touche la fonction acet-sys-keystate GetKeyState Win 32 quelqu'un connait ? Jusque la tout va bien je roulais mon pacman sous autocad 2007 sur un pc windows xp mais quand je suis venu pour transferer mon code sur mon portable autocad 2007 windows vista sa loop infini sur ma fonction de controle de touche et je crois que la cause et windows vista que le GetKeyState n'est pas pareil jai chercher sur internet mais rien trouver es-ce que quelqu'un a deja utilisé sous vista ??? merci (defun Pac_MainLoop_Exec (Game_Data / DoWhile Job_ToDo) (setq DoWhile T Job_ToDo 'DoNothing ) (while DoWhile (setq Job_ToDo (cond ((= -128 (acet-sys-keystate 37)) 'Pac_Move_Left) ; Arrow left ((= -128 (acet-sys-keystate 38)) 'Pac_Move_Up) ; Arrow Up ((= -128 (acet-sys-keystate 39)) 'Pac_Move_Right) ; Arrow right ((= -128 (acet-sys-keystate 40)) 'Pac_Move_Down) ; Arrow down ; to find required key inspect this and press key ; See the documentation for the GetKeyState Win32 function for additional details. ((= -128 acet-sys-keystate 88) ; x (setq DoWhile nil) 'DoNothing ) (t Job_ToDo) ; ensure to continue if no key press ) Game_Data (Apply Job_ToDo (list Game_Data)) ) (command "zoom" "e") ) )
bseb67 Posté(e) le 6 juillet 2009 Posté(e) le 6 juillet 2009 Salut jipicad, je n'ai pas vraiment cherché, mais par contre je suis preneur de ton lisp complet pourtester et m'amuser entre midi et deux. :D a+ Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
(gile) Posté(e) le 6 juillet 2009 Posté(e) le 6 juillet 2009 Salut, Je ne sais si ça répond à ton problème, mais il me semble qu'il manque des parenthèses dans l'expression : (= -128 acet-sys-keystate 88) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
krunch Posté(e) le 11 septembre 2009 Posté(e) le 11 septembre 2009 Bonjour Je reviens sur cette fonction acet-sys-keystate qui m'intéresse beaucoup mais que je n'arrive pas à faire marcher (je suis aussi sous Vista hélas) En fait j'ai l'impression que dans la boucle ci-dessous il manque quelquechose pour réacualiser le KeyState... Alors voilà ce que j'obtiens :1- lancer la boucle, elle est censée renvoyer l'état de la touche Espace mais elle ne renvoie qu'une suite de 0 ou 12- bien annuler avec Escape avant de cliquer n'importe où car avec Vista on se retrouve à devoir quitter AutoCad de force...3- si on relance après avoir appuyé un nombre impair de fois sur Espace pendant la boucle précédente on obtient bien un changement (0 au lieu de 1 ou l'inverse)4- si on relance avec la touche Espace justement (répétition dernière commande) on obtient une suite de -127 ou -128 Quelqu'un sait comment ça marche ? (defun c:do () (setq loop t) (while loop (print (acet-sys-keystate 32)) ) )
polo777 Posté(e) le 14 septembre 2009 Posté(e) le 14 septembre 2009 Bonjour krunch,pour (1) La fonction acet-sys-keystate te repond convenablement en fait elle répond :1 la touche est appuyée0 la touche est relâcherdans ta boucle tu surveilles que la touche concernée pour l'état de ta variable loop dans la fonction de test est déclarée comme variable globale il est normal que tu es des états différents après un rappel de la fonction il est important dans ce cas de la déclarer locale : (defun c:do (/ loop) bonne continuation [Edité le 14/9/2009 par polo777]
krunch Posté(e) le 15 septembre 2009 Posté(e) le 15 septembre 2009 Merci pour ta réponse, mais le problème de base c'est juste que si j'appuie sur Espace la fonction acet-sys-keystate ne le détecte pas : la boucle renvoie une suite de 0 parce que cette fonction n'est pas actualisée par la boucle > Est ce que c'est pareil chez vous ?? Sinon..- La variable loop devrait effectivement être en local, mais de toute façon elle ne sert à rien pour le moment puisqu'elle ne peut pas être passée à nil - La valeur renvoyée est plus compliquée, le bit0 est basculé succéssivement : séquence touches : KeyDown KeyUp KeyDown KeyUp KeyDown ...valeur renvoyée.... : 0............... -127... 1 ............... -128 ... 0.............. ... [Edité le 15/9/2009 par krunch]
Jipicad Posté(e) le 21 novembre 2009 Auteur Posté(e) le 21 novembre 2009 Salut Krunch Chez moi (acet-sys-keystate 32) fonctionne je comprend pas bien ton problème j'ai créer une fonction keycontroler pour remédier a mon problème de base je suis sous vista et la fonction ne regarde plus si (=(acet-sys-keystate 32) -127) ou (=(acet-sys-keystate 32) 1) ou ... la fonction set au départ le statut des keys ensuite on fait nos comparaisons avec se statut. Je sais pas si ton problème correspond a se lui que j'avais fais moi signe si tu veux que je développe sur le sujet. a+
krunch Posté(e) le 25 novembre 2009 Posté(e) le 25 novembre 2009 Bon, c'est simple : si je lance la fonction qui suit ("go" depuis Autocad) j'obtiens un défilement de 0... et si j'appuie sur la barre d'espace il ne se passe rien ! (defun c:Go () (while T (print (acet-sys-keystate 32)) ) ) Peut être que ça vient de Vista (http://forums.augi.com/showthread.php?t=107887&highlight=jeum ) peut être pas, je ne sais toujours pas...
Jipicad Posté(e) le 25 novembre 2009 Auteur Posté(e) le 25 novembre 2009 Je comprend pas se que t'essaie de faire ???????
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant