[R] Multitache sous AutoIt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2116
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

[R] Multitache sous AutoIt

#1

Message 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.
Modifié en dernier par TommyDDR le jeu. 31 déc. 2009 11:34, modifié 1 fois.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Multitache sous AutoIt

#2

Message par timmalos »

Donc Impossible avec Autoit.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Multitache sous AutoIt

#3

Message 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é. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2116
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Multitache sous AutoIt

#4

Message 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++ ?)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Multitache sous AutoIt

#5

Message 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. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2116
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Multitache sous AutoIt

#6

Message par TommyDDR »

Comment envoyer un paramètre à une fonction appelé par AdlibRegister ?
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Multitache sous AutoIt

#7

Message 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.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Multitache sous AutoIt

#8

Message par Tlem »

Il est quand même bien plus simple de jouer avec quelques variables globales que de s'essayer au multi-threading. :P

Si vous voulez quelque chose de plus sérieux, changez de langage.
AutoIt est là pour sa simplicité, mais il y à des contraintes ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2116
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Multitache sous AutoIt

#9

Message 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.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Multitache sous AutoIt

#10

Message 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. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2116
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [R] Multitache sous AutoIt

#11

Message 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 :
Jeu.jpg
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
Fichiers joints
Jeu.rar
(60.23 Kio) Téléchargé 102 fois
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Multitache sous AutoIt

#12

Message 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. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2116
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [R] Multitache sous AutoIt

#13

Message 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.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Multitache sous AutoIt

#14

Message par Tlem »

C'est par-ce que vous n'avez pas bien cherché. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [R] Multitache sous AutoIt

#15

Message 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.
Répondre