Aller au contenu

Messages recommandés

Posté(e)

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")
 )
)

Posté(e)

Salut jipicad,

 

je n'ai pas vraiment cherché, mais par contre je suis preneur de ton lisp complet pour

tester et m'amuser entre midi et deux. :D

 

a+

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

  • 2 mois après...
Posté(e)

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 1

2- 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))
 )
)

 

Posté(e)

Bonjour krunch,

pour (1) La fonction acet-sys-keystate te repond convenablement en fait elle répond :

1 la touche est appuyée

0 la touche est relâcher

dans 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]

Posté(e)

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]

  • 2 mois après...
Posté(e)

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+

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité