STIC Discussion:STIC IV/ex4

De EduTech Wiki
< STIC Discussion:STIC IV
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Questions sur l'exercice 4 -- Claire Peltier 12 avril 2010 à 18:45 (CEST)

Bonjour, J'ai bien avancé sur les exercices mais je suis coincée sur les points suivants :

  • jeu fromages : l'apprenant doit compter 8 fromages en cliquant dessus. Chaque clic sur un fromage le déplace dans une caisse. Comment faire pour le feedback ? J'ai envisagé plusieurs solutions mais sans savoir vraiment comment les mettre en oeuvre : créer une zone sensible autour de la caisse qui puisse "comptabiliser" le nombre d'éléments qui sont dessus après validation de la fin du jeu, paramétrer le jeu de telle sorte que le nombre de clics sur les fromages puissent être comptabilisés ??? J'ai bien une vague idée qu'il va falloir utiliser les conditions (if..else), mais je ne sais pas comment choisir et paramétrer mes variables au départ.
  • navigation entre clips : j'ai lu que les bonnes pratiques Flash voulaient qu'on utilise des movie clips intégrés dans l'animation principale mais j'ai de la peine à les piloter correctement (surtout le son). J'ai utilisé des boutons play et stop pour stopper et reprendre l'animation. Ca marche bien, sauf le son qui continue à se dérouler. Si je laisse mes animations visibles dans la timeline sans les "encapsuler" tout marche (y compris le son) car j'utilise les étiquettes pour naviguer entre les différentes parties.

Pouvez-vous m'aider ? Je peux aussi me déplacer à Tecfa, ça sera peut-être plus simple... Merci pour votre réponse. Claire

Re: Questions sur l'exercice 4 -- Daniel K. Schneider 12 avril 2010 à 20:23 (CEST)

Pour le comptage: Il faut séparer affichage et la logique de compter.

D'abord il faut décider ce que vous voulez compter:

  • Fromages dans la caise ?
  • Clics en tout ?
  • Mauvais clics ?

Pour chacune faire une variable et la mettre à zéro du début du script qui pilote cette animation:

fromages_dans_caisse = 0;
clics = 0;

Ensuite, à chaque fois qu'un utilisateur fait ou réussi qc. augmenter ces variables.

fonction xxx (ev) {
 clics = clics + 1;
....... reste du code qui gère les clics
 }

Ensuite, il faut effectivement décider quand il faut afficher quoi et comment.

Soit vous affichez dès qu'un utilisateur fait qc. soit à la fin. Dépend de vos réflexions sur le design de l'outil. Pour afficher il suffit de réserver une zone de texte, puis afficher ces nombres. Enfin si l'enfant ne sais pas lire les nombres, faut envisager de jouer un mp3...

Pour le son: On peut l'arrêter avec un peu de ActionScript. Insérer cela tel quel au début d'une fonction qui fait un play de qc.

SoundMixer.stopAll();

Re: Re: Questions sur l'exercice 4 -- Claire Peltier 12 avril 2010 à 23:03 (CEST)

Ok, merci. Je vais tester tout ça. Claire

Re: Re: Questions sur l'exercice 4 -- Claire Peltier 13 avril 2010 à 10:26 (CEST)

Bonjour,

J'ai inséré le code suivant :

var score=0;
cheese1.addEventListener(MouseEvent.CLICK, moveCheese1);
function moveCheese1 (event:MouseEvent) {
score=score+1;
cheese1.x=402.8;
cheese1.y=222.7; }
cheese1.x=23.9;
cheese1.y=104.3;

et ainsi de suite pour tous les fromages. Et ensuite :

validate_btn.addEventListener(MouseEvent.CLICK, validateScore):void;
function validateScore (event:MouseEvent)
if (score==8)
{	 trace("you win");
}
else
{	trace("missed");
}

J'ai un message d'erreur qui me dit :

1078: Label must be a simple identifier.

C'est un peu du chinois pour moi :(

Ce que je veux faire : l'apprenant doit compter 8 fromages. Quand il pense en avoir déplacé ce nombre dans la caisse (par clics, pas par drag and drop), il valide sur un bouton. Selon le nombre qu'il aura cliqué il sera dirigé sur un frame avec du son et une animation (pour l'instant j'ai juste mis "trace" pour tester. Que manque-t-il pour que ça marche ?!?

Re: Re: Re: Questions sur l'exercice 4 -- Daniel K. Schneider 13 avril 2010 à 10:36 (CEST)

A mon avis la définition de la fonction. Sop corps doit absolument se trouver entre { }

function validateScore (event:MouseEvent) {
if (score==8)
{	 trace("you win");
}
else
{	trace("missed");
}

}

Re: Questions sur l'exercice 4 -- Claire Peltier 13 avril 2010 à 11:06 (CEST)

J'ai malheureusement toujours le même message d'erreur :

1078: Label must be a simple identifier.

J'ai déposé le fichier sur ma page travaux : http://tecfaetu.unige.ch/etu-maltt/pixel/ghebali4/stic_4/ex4/ Merci pour votre aide.

Re: Re: Questions sur l'exercice 4 -- Daniel K. Schneider 13 avril 2010 à 14:25 (CEST)

C'est juste 2 erreurs à la fin: une acolade de trop tout à la fin, puis un ":void" qui ne fait pas de sens pour addEventListener. Puis bien entendu il faut définir aussi la fonction validateScore. A mon avis vous avez juste tué la ligne avec "function" ....

validate_btn.addEventListener(MouseEvent.CLICK, validateScore);

function validateScore(ev) {
	if (score==8) {
		trace("you win");
	} else {
		trace("missed");
	}
}

PS: Après faut se décider si vous voulez faire cela dans la main timeline (dans ce cas, faut impérativement un stop(); )

Re: Questions sur l'exercice 4 -- Claire Peltier 13 avril 2010 à 14:47 (CEST)

Merci.

Le problème c'est que maintenant quand je clique sur un fromage, il va dans la caisse mais repart aussi sec. Et puis j'ai beau cliquer sur 8 fromages, le feedback est toujours "missed"...

Désolée...

J'ai modifié le fichier sur http://tecfaetu.unige.ch/etu-maltt/pixel/ghebali4/stic_4/ex4/

Re: Re: Questions sur l'exercice 4 -- Daniel K. Schneider 13 avril 2010 à 17:13 (CEST)

Facile (je l'ai déjà vu dans mon message précédant. Faut absolument arrêter l'animation au départ, sinon cela va continuer dans d'autres frames puis boucler ....

donc insérer:

stop ();

Re: Questions sur l'exercice 4 -- Claire Peltier 13 avril 2010 à 18:10 (CEST)

ça marche !!! Merci beaucoup. Je commençais à désespérer. A force d'avoir le nez dessus, on ne voit plus rien. Je continue mais je risque d'avoir encore besoin de vous par la suite...Bonne soirée.Claire

Comment faire bouger en même temps les fromages et la caisse ? -- Claire Peltier 14 avril 2010 à 23:04 (CEST)

Bonjour, J'ai lu tout ce que vous m'avez envoyé au sujet de Tweenlite mais je dois dire que ça reste encore un peu opaque pour moi...

J'ai essayé autre chose :

stick.addEventListener (MouseEvent.MOUSE_DOWN, mouseDownHandler);
stick.addEventListener (MouseEvent.MOUSE_UP, mouseUpHandler);
function mouseDownHandler (evt:MouseEvent):void{
var object=evt.target;
object.startDrag(); }
function mouseUpHandler (evt:MouseEvent):void{
var object=evt.target;
object.stopDrag();
cube.addEventListener (MouseEvent.MOUSE_UP, moveCube);
function moveCube(event:MouseEvent)
{cube.x=403.8;cube.y=115.3;} 
cube.x=403.8;
cube.y=219.3;
}

En gros, quand l'apprenant a validé, il peut enlever le bâton (par drag and drop), ce qui fait tomber la caisse. Le problème, c'est que je n'arrive pas à faire en sorte que les fromages suivent...J'imagine qu'il y a là-dessous une histoire de child et de parent mais je ne sais pas trop comment tourner ça.

Re: Comment faire bouger en même temps les fromages et la caisse ? -- Daniel K. Schneider 15 avril 2010 à 22:38 (CEST)

On pourrait faire bouger chaque fromage dans la caisse, mais c'est effectivement un peu pénible.

Donc en regardant rapidement le manuel: Y a moyen de mettre des objets dans un conteneur http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e26.html

Comme votre caisse est un Sprite en principe, je pense qu'on peut lui ajouter les formages comme enfants. Quand une personne met le fromage dans la caisse, faut ajouter CE fromage dans le conteneur

cheese = ..... 
caisse.addChild(cheese);  // enfin substituer caisse pour le nom de votre caisse.

si cela ne marche pas:

var container:Sprite = new Sprite(); 
... ensuite ajouter la caisse et les fromages

Re: Re: Comment faire bouger en même temps les fromages et la caisse ? -- Claire Peltier 16 avril 2010 à 18:53 (CEST)

J'ai creusé la question des Sprites et j'ai pondu ça (cheese est un sprite et cube est un movie clip. cube sprite ça ne marche pas):

var cheese1:Cheese;
{cheese1=new Cheese();
addChild (cheese1); }
var cheese2:Cheese;
{cheese2=new Cheese();
addChild (cheese2);}

etc.

var score=0;
cheese1.addEventListener(MouseEvent.CLICK, moveCheese1);
function moveCheese1 (event:MouseEvent)
{score=score+1;
cheese1.x=402.8;
cheese1.y=222.7;}
cheese1.x=23.9;
cheese1.y=104.3;

etc.

validate_btn.addEventListener(MouseEvent.CLICK, validateScore);
function validateScore(ev)
{if (score==8) 
{trace("win");} 
else if (score<8)
{trace("not_enough");}
else if (score>8)
{trace("too_much");}}
stick.addEventListener (MouseEvent.MOUSE_DOWN, mouseDownHandler);
stick.addEventListener (MouseEvent.MOUSE_UP, mouseUpHandler);
function mouseDownHandler (evt:MouseEvent):void{
var object=evt.target;
object.startDrag();}
function mouseUpHandler (evt:MouseEvent):void{
var object=evt.target;
object.stopDrag();
if (cheese1.hitTestObject(cube))
{cube.addChild(cheese1);
cheese1.x=0;
cheese1.y=0;}

etc.

cube.addEventListener (MouseEvent.MOUSE_UP, moveCube);
function moveCube
(event:MouseEvent)
{cube.x=403.8;
cube.y=115.3;}
cube.x=403.8;
cube.y=219.3;}

Malheureusement, ça ne marche toujours pas. La caisse tombe mais les fromages restent en l'air. Pourriez-vous me dire ce qui cloche ? Mon fichier est là : http://tecfaetu.unige.ch/etu-maltt/pixel/ghebali4/stic_4/ex4/ (sous questions en cours). Merci !

Re: Re: Re: Comment faire bouger en même temps les fromages et la caisse ? -- Daniel K. Schneider 16 avril 2010 à 19:07 (CEST)
euh cela ne peut certainement pas marcher, mais j'ai pas le temps de voir tout-de-suite-. Envoyez-moi un mail demain aprèm si j'ai pas répondu et oublié.....

En gros en regardant rapidement: vous devez ajouter VOS fromages comme enfant à un seul sprite. Si j'ai bien compris, vous avez crée des nouveaux sprites avec rien dedans. Un sprite c'est comme un movie clip, faut le remplir avec qc. .....

Questions exercice 4, suite -- Claire Peltier 19 avril 2010 à 23:44 (CEST)

Bonsoir, me revoilà avec mes fromages (c'est assez indigeste...)

J'ai beau tourner les choses dans tous les sens, je bloque sur les éléments suivants :

  • Lorsque l'apprenant n'a pas mis assez de fromages dans la caisse, il peut en rajouter, mais j'aimerais qu'il puisse valider à nouveau pour avoir un feedback. Or, on ne peut valider qu'une seule fois. Est-ce une histoire de boucle (loop)?
  • Pourquoi lorsque l'on met le bon nombre de fromages ou un peu trop, les sons des feedbacks se mettent à jouer tous en même temps ? J'avais pourtant mis des stop();
  • Comment enlever des fromages (en cliquant dessus) lorsqu'il y en a trop et revalider ensuite ?

Mon fichier est déposé sur : http://tecfaetu.unige.ch/etu-maltt/pixel/ghebali4/stic_4/ex4/

Merci...

Re: Questions exercice 4, suite -- Daniel K. Schneider 20 avril 2010 à 17:42 (CEST)

Vous avez des multiples problèmes:

  • A priori la caisse avec les fromages devrait être visible sur toute la durée, sinon ni la caisse ni les fromages seront manipulables, donc on pourrait plus rien enlever de la caisse.
  • Ensuite il faudrait plusieurs couches de scripts, en tout cas deux. La première doit tenir sur toute la ligne
  • Il faut aussi faire attention avec la logique de clips embarqués. Il s'agit de mini-mondes à part. Dans votre cas j'aurait plutot fait une animation sur la main time line, donc qqs. centaines de frames.

Ceci dit, avec AS c'est plus simple (en tout cas pour moi).

Je vous ai envoyé une solution. Pour me simplifier la vie, j'ai tué toutes vos animations sauf une et toute la timeline sauf le premier framee. Je déplace la boite avec Tweenlite et j'utilise la propriéte .visible pour cacher afficher souris grise/rouge.