Page 1 sur 1
[R] Multitache sous AutoIt
Posté : mer. 30 déc. 2009 17:18
par TommyDDR
Bonjour,
Tout d'abord je tiens à dire que j'ai recherché un sujet traitant de ma demande avant de posté ^^ (le sujet sur _Adlib ne peut me convenir dans mon cas)
Voila, je me suis lancé dans la création d'un petit jeu dans lequel, lorsqu'on bouge un personnage, cela lance une petite animation de quelques millisecondes (~= 200ms)
mais je voulais faire un jeu multijoueur et donc pouvoir bougé 2 personages en même temps.
Je voudrais que le processeur partage équitablement son temps entre les 2 fonctions. Je ne veux pas qu'une animation DOIT se finir avant de pouvoir lancer l'autre.
Merci.
Re: [..] Multitache sous AutoIt
Posté : mer. 30 déc. 2009 18:54
par timmalos
Donc Impossible avec Autoit.
Re: [..] Multitache sous AutoIt
Posté : mer. 30 déc. 2009 19:13
par Tlem
Tout dépend du codage de l'application.

La nouvelle fonction
AdlibRegister() de la nouvelle version de AutoIt permet de gérer plusieurs fonctions, donc si votre code est bien fait, vous devriez peut être arriver à faire quelque chose qui permet d'équilibrer le mouvement entre deux fonctions.

Évidement, si l'une des fonctions venait à être bloquée sur l'exécution d'un code, alors c'est tout le code qui serait bloqué.

Re: [..] Multitache sous AutoIt
Posté : mer. 30 déc. 2009 19:18
par TommyDDR
L'animation se fait dans un for (bloquant) qui bouge l'image et la modifie.
Donc, aucun moyen de faire du vrai multitâche sous autoit :/
(N'y a t-il pas moyen de créer des thread sous autoit comme en C/C++ ?)
Re: [..] Multitache sous AutoIt
Posté : mer. 30 déc. 2009 19:37
par Tlem
Pourquoi diable voulez-vous obligatoirement passer par une boucle
For/Next. Une fonction et
AdlibRegister() sont capable de faire la même chose mais sans blocage du code.

Re: [..] Multitache sous AutoIt
Posté : mer. 30 déc. 2009 20:34
par TommyDDR
Comment envoyer un paramètre à une fonction appelé par AdlibRegister ?
Re: [..] Multitache sous AutoIt
Posté : mer. 30 déc. 2009 22:23
par timmalos
Je ne crois pas que ca soit possible.
Cependant tu peux utiliser une variable globale et faire
Global $parametre = "1"
Puis a chaque lancement de ta fonction tu regarde $parametre et fait en fonction de ca.
Tu peux egalement regarder les liens ci-dessous mais attention aux maux de tête, c'est nettement plus poussé, monoceres et trancexx ont essayé de bosser la dessus.
Necessite pour comprendre de connaitre et maitriser les pointeurs.
http://www.autoitscript.com/forum/index ... ntry685983
http://www.autoitscript.com/forum/index ... ntry710924
http://www.autoitscript.com/forum/index ... ntry686626
Aperemment ca serait du vrai multi-thread.
Sinon, sur le lien suivant (
http://www.autoitscript.com/forum/index ... ntry716515) ca donne egalement la solution du multi-process, beaucoup plus facile à creer.
Re: [..] Multitache sous AutoIt
Posté : jeu. 31 déc. 2009 00:30
par Tlem
Il est quand même bien plus simple de jouer avec quelques variables globales que de s'essayer au multi-threading.
Si vous voulez quelque chose de plus sérieux, changez de langage.
AutoIt est là pour sa simplicité, mais il y à des contraintes ...
Re: [..] Multitache sous AutoIt
Posté : jeu. 31 déc. 2009 11:34
par TommyDDR
J'ai finalement opté pour des variables globales associé à l'UDF _AdbliEnable (permettant d'envoyer des paramètres à une fonction. Et me suis fait ch**r à virer la boucle for ^^
Merci.
Re: [R] Multitache sous AutoIt
Posté : jeu. 31 déc. 2009 11:45
par Tlem
Si vous utilisez la dernière version de
AutoIt, vous n'aurez pas besoin de l'UDF
_AdlibEnable.
De plus votre script ne risquera pas d'être obsolète trop vite.

Re: [R] Multitache sous AutoIt
Posté : jeu. 31 déc. 2009 11:47
par TommyDDR
Et dans un élan de bonté, je fourni le code source ^^
Pour un bon affichage des images : Dézipez le .rar, compilez le .au3 et lancez le .exe (les images sont mises en FileInstall() donc il faut compiler)
(/!\ avec la nouvelle version de SciTe, celle sans AdLibEnable, il y a deux erreurs à la "compilation" (Touche F5) mais cela n'empêche pas le fonctionnement du jeu
Tlem, si tu/vous as/avez une solution pour palier à ce problème, je suis tout ouïe)
Prochaine étape : Multijoueur online ^^
Impr :
But du jeu : Ramasser plus de pièces que l'autre joueur.
Touches Joueur 1 : les 4 flèches directionnelles
Touches Joueur 2 : 4 5 6 8 du pavé numérique
Re: [R] Multitache sous AutoIt
Posté : jeu. 31 déc. 2009 11:57
par Tlem
Vos deux erreurs de compilation sont liées à l'utilisation des fonctions
AdlibEnable et
AdlibDisable.
Pour moi, cela signifie que vous utilisez la dernière version de
AutoIt, or pour celui-ci ces deux fonctions ne sont plus sensée exister (Voir les news de ce lien :
http://www.autoitscript.fr/forum/viewto ... =22&t=4317).
Donc ou vous faites abstraction de ces erreurs, mais dans une future version de
AutoIt ces fonctions ne seront plus du tout supportées, ou bien vous mettez à jour votre script pour remplacer l'utilisation de l'UDF
_AdlibEnable() par les nouvelles fonctions de AutoIt (respectivement :
AdlibRegister() et
AdlibUnRegister() ).
Je vous conseil vivement la dernière solution.

Re: [R] Multitache sous AutoIt
Posté : jeu. 31 déc. 2009 12:01
par TommyDDR
J'ai voulu implémenté ces fonctions mais j'ai besoin de passer des paramètres aux fonctions appelés et je n'ai pas trouver comment faire avec AdlibRegistrer :/
Les 2 persos peuvent bouger dans la même direction et donc une variable global ne peut convenir.
Re: [R] Multitache sous AutoIt
Posté : jeu. 31 déc. 2009 12:11
par Tlem
C'est par-ce que vous n'avez pas bien cherché.

Re: [R] Multitache sous AutoIt
Posté : jeu. 31 déc. 2009 14:01
par timmalos
Vous pouvez mettre votre jeu dans la partie Exemples. C'est un super exemple pour d'autres qui seraient tenté de faire un jeu en Autoit.