Bonjour, Dans un projet, on a un objet qui se copie et qui prend la place d'un autre qui lui s'efface. Donc on a un script de ce type dans l'objet ancien: nouveau.copie exécute init ancien supprime Et dans nouveau.init, on a: nouveau.x <- ancien.x nouveau.y <- ancien.y nouveau était positionné à des endroit bizarre ! Après recherche, le problème vient du fait que le script init semble être appelé _après_ 'ancien supprime' ! J'ai remplacé par la commande exécute par l'appel direct du script et la c'est bon. J'ai testé sur un objet les deux types d"appel: objet exécute script1 objet script2 script1 s'execute après script2 placé pourtant avant ! Est-ce que c'est normal ? Est-ce que ce comportement fait partie de la sémantique de exécute ? Je trouve cela pas très intuitif et risqué (la preuve avec notre projet). a+ Vincent Ne gardez plus qu'une seule adresse mail ! Copiez vos mails vers Yahoo! Mail _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
Bonjour,
Je pense que exécute lance le script comme processus (une fois), de même que active lance le processus répétivement. Une fois le processus lancé, l'instruction suivante est exécutée immédiatement, suivant le temps d'exécution du script lancé comme processus, l'instruction suivante peut être exécutée (ici Appel de script) avant la fin du processus. On peut faire exécuter un script par un autre objet en modifiant la partie gauche (lr nom du 'receiver') par substitution en lâchant une brique ayant le nom d'un objet. (halo brun d'un morph) ou dans le menu du visualiseur article 'une brique représentant cet objet. En principe, lors d'une copie, il faut affecter à une variable de type player la brique objet.copie pour avoir une poignée sur cet objet. La valeur de cette variable (brique saisie par la gauche (et non la flèche d'affectation)peut se substituer au nom du receiver, ce qui permet de faire exécuter un script ou des commandes par l'objet copié. IL est possible de prendre une brique de commande là où elle se trouve dans un objet et de la placer dans un script en modifiant le receveur qui est par défaut celui de l'objet dans le visualiseur. Par contre en agissant ainsi on peut demander à des objets de faire des choses qu'ils ne savent pas faire. Par exemple demander à une ellipse de stocker un texte :-( Si la substitution d'objet est pour obtenir un changement de forme,il est beaucoup plus simple de changer le graphique de l'objet par leas commandes de la catégorie graphique pour les dessins, et la commande graphique dans la catégorie scène pour les scènes. -------- Message d'origine-------- De: [hidden email] de la part de Vincent Osele Date: mer. 10/10/2007 13:19 À: [hidden email] Objet : [Squeak-fr] EToys: appel d'un script Bonjour, Dans un projet, on a un objet qui se copie et qui prend la place d'un autre qui lui s'efface. Donc on a un script de ce type dans l'objet ancien: nouveau.copie exécute init ancien supprime Et dans nouveau.init, on a: nouveau.x <- ancien.x nouveau.y <- ancien.y nouveau était positionné à des endroit bizarre ! Après recherche, le problème vient du fait que le script init semble être appelé _après_ 'ancien supprime' ! J'ai remplacé par la commande exécute par l'appel direct du script et la c'est bon. J'ai testé sur un objet les deux types d"appel: objet exécute script1 objet script2 script1 s'execute après script2 placé pourtant avant ! Est-ce que c'est normal ? Est-ce que ce comportement fait partie de la sémantique de exécute ? Je trouve cela pas très intuitif et risqué (la preuve avec notre projet). a+ Vincent _____________________________________________________________________________ Ne gardez plus qu'une seule adresse mail ! Copiez vos mails vers Yahoo! Mail _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr winmail.dat (5K) Download Attachment |
Bonjour, Ne gardez plus qu'une seule adresse mail ! Copiez vos mails vers Yahoo! Mail _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
J'ai mis un exemple de création d'objet par copie sur la page idiomes Etoys
http://community.ofset.org/index.php/E-toys_idiomes_de_programmation#Cr.C3.A9ation_d.27une_copie_d.27un_morph_par_programme.2C_les_anneaux_du_serpent C'est tiré du projet du jeu serpent et concerne la création d'anneaux qui font grandir le serpent. Vos questions sont efficaces pour faire progresser cette page :-) Ci dessous quelques commentaires dans le texte. -------- Message d'origine-------- De: [hidden email] de la part de Vincent Osele Date: mer. 10/10/2007 18:35 À: [hidden email]; [hidden email] Objet : [Squeak-fr] Re: RE : EToys: appel d'un script Bonjour, > Je pense que exécute lance le script comme processus (une fois) Dans son propre thread si je comprends bien... > l'instruction suivante peut être exécutée (ici Appel de script) avant la fin du processus. En effet. Bon, ca va pas être facile d'expliquer ce problème de temps réel à mon fils !! Je pensais introduire le temps réel d'ici 5 ou 6 ans, pas avant ;-)))) En général pour les enfants c'est plus simple de penser en terme d'agents autonomes. Des processus activés comme un objet avançant tout seul, un autre surveillant une touche appuyée pour le faire tourner est plus simple qu'une grande boucle comme au temps de logo faisant toutes les actions. A l'image de la vie réelle, ils pensent plus en terme d'actions concurrentes que simultanées. Lorsque des problèmes de synchronisation se posent, c'est le moment de découvrir la nation d'ordre et de séquence ordonnée. Squeak offre des possibilités de résoudre le problème: Mettre l'appel au deuxième script à la fin du script appelé en processus. Mettre une variable logique à faux, qui sera mise à vrai par le processus à sa fin. Et ... lancer un second processus qui attend le moment de lancer sa commande. Pour exercer la catégorie contrôle des scripts, essayez de construire avec votre fils des feux de circulation (3 ellipses sur une scène aux coins arrondis) et programmez la séquence qui allume automatiquement les différentes phases des feux (changement de couleur des ellipses). Utiliser une variable numérique comme un compteur qui se décrémente à chaque tour et tester le passage à zéro pour arrêter et lancer des scripts.C'est un projet qui a bien marché avec mes élèves. On peut le combiner comme extension avec la voiture qui suit la route. Si les feux changent en même temps la couleur de la route, ils peuvent arrêter ou laisser passer la voiture. > En principe, lors d'une copie, il faut affecter à une variable de type player la brique objet.copie pour > avoir une poignée sur cet objet. La valeur de cette variable (brique saisie par la gauche (et non la > flèche d'affectation)peut se substituer au nom du receiver, > ce qui permet de faire exécuter un script ou des commandes par l'objet copié. On fait les deux, soit par variable soit par appel direct d'un script 'init' sur objet.copie quand la copie peut s'initialiser toute seule. Exact Je l'ai constaté en faisant l'exemple du serpent , je parle de phase d'initiation, ce pourrait être un script init. Dans la 2ième solution, on a une variable de moins ;-) > Par contre en agissant ainsi on peut demander à des objets > de faire des choses qu'ils ne savent pas faire. > Par exemple demander à une ellipse de stocker un texte Ceci dit, on peut le faire aussi avec exécuter puisque dans la partie des noms de scripts apparaissent tout les scripts du monde entier et non pas seulement ceux de l'objet visé. J'y ai pensé juste après l'envoi :-) > Si la substitution d'objet est pour obtenir un changement de forme, >il est beaucoup plus simple de changer le graphique de l'objet par > leas commandes de la catégorie graphique pour les dessins, et la commande > graphique dans la catégorie scène pour les scènes. Oui, j'y ai pensé ce matin en rédigeant ce texte. Bon, on a pas regardé encore le chg d'apparence. Il y a la commande ressemble à ... qui a parfois une action trop forte , la ressemblance s'étendant au type de morph en plus de l'aspect graphique. Mieux vaut les commandes modifiant le graphique. Pour créer des objets de type dessin utiliser la palette du tiroir navigation, ou jeter des fichiers jpg gif ou png dans squeak. Pour les scènes utiliser le halo gris à droite. En tout cas merci pour les explications claires. a+ Vincent PS: au fait, quand je dis on, c'est pas une asscendance royale, c'est moi et mon fils ;-)) PS j'ai découvert tout récemment que les morphs tels que l'ellipse,le polygone et même le texte(je iens juste d'essayer transmettent leur image avec la commande (getter) graphique. Cette commande n'existe pas pour ces objets, mais on peut la piquer dans un dessin et changer le receiver pour la fabriquer (voir lus haut). Avec le texte, on obtient un texte sous forme d'image !!! Une fois de plus Squeak prouve que si on a une idée logique ça marche. Même avec la montre analogique et la montre digitale !!!!! _____________________________________________________________________________ Ne gardez plus qu'une seule adresse mail ! Copiez vos mails vers Yahoo! Mail _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr winmail.dat (7K) Download Attachment |
Free forum by Nabble | Edit this page |