OVH Cloud OVH Cloud

Bug trouvé à corriger

4 réponses
Avatar
Olivier Pons
Simplement un post ici mais je ne sais pas où le poster
ailleurs et je n'ai pas le temps (surtout ça) de le
faire en Anglais ni de faire suivre à Macromedia.
Pour reproduire c'est extrêmement simple :

- créer un movie clip (nommé pour l'exemple mcMaster) ;
- créer un movie clip (nommé pour l'exemple mcDetail) ;
- mettre dans mcMaster un clip McDetail et le nommer
"BtnDetail" ;
- mettre le clip mcMaster dans la séquence principale,
image 1.

Taper ce code
- à l'image 1:
1> var Test:Boolean;
2> Test=true;

- à l'image 2 de la séquence principale :
1> this.onBtnDetail = function() {
2> mcMaster._xscale = 30;
3> mcMaster._yscale = 30;
4> gotoAndPlay(1); // juste pour un test;
5> }
6> mcMaster.BtnDetail1.onRelease = this.onBtnDetail;

à l'image 3:
1> stop(); // arrêter l'anim

mettre un point d'arrêt aux lignes :
- image 1 : ligne 2
- image 2 : lignes 4 et 6
- image 3 : ligne 1

lancer l'anim.
le mcDetail devient cliquable dès l'image 2.
normal. en cliquant dessus on rentre bien dans
la fonction et là il devrait *revenir* à l'image 1
de par le gotoAndPlay(1) mais *non* ! il continue
le script ! et quel que soit le numéro de l'image
dans le "gotoAndPlay", c'est ignoré et le script
continue linéairement ! il suffit juste de faire
du pas à pas pour le voir !

C'est un bug clairement identifiable.
Une solution pour le contourner ? Simple :
dans le mcDetail, rajouter un boolean "Click"
et le mettre à true dans la fonction onClick
décrite juste au dessus et dans l'ordre linéraire
tester si ce boolean est vrai :

1> this.onBtnDetail = function() {
2> mcMaster._xscale = 30;
3> mcMaster._yscale = 30;
4> this.Click=true;
5> gotoAndPlay(1); // juste pour un test;
6> }
7> if (!mcMaster.BtnDetail.Click) {
8> mcMaster.BtnDetail1.onRelease = this.onBtnDetail;
9> } else {
10> mcMaster.BtnDetail1.Click = false;
11> // faire son code...
12> }

Attention ! Bien laisser gotoAndPlay() sinon, le bug
disparait et on ne continue pas de façon linéaire,
(la fonction se termine normalement, sans continuer).

Pour m'écrire directement :
olivier (point) pons (at) free (point) fr

Olivier

4 réponses

Avatar
Olivier Pons
PS :

Si quelqu'un voulait le faire suivre en Anglais
à Macromedia ça aiderait toute la communauté à avancer.
Merci !
Avatar
zwetan
>
- à l'image 2 de la séquence principale :
1> this.onBtnDetail = function() {
2> mcMaster._xscale = 30;
3> mcMaster._yscale = 30;
4> gotoAndPlay(1); // juste pour un test;



this.gotoAndPlay(1); //methode de MovieClip

et non pas:
gotoAndPlay(1); //action datant de Flash v2

5> }
6> mcMaster.BtnDetail1.onRelease = this.onBtnDetail;
à l'image 3:
1> stop(); // arrêter l'anim

mettre un point d'arrêt aux lignes :
- image 1 : ligne 2
- image 2 : lignes 4 et 6
- image 3 : ligne 1

lancer l'anim.
le mcDetail devient cliquable dès l'image 2.
normal. en cliquant dessus on rentre bien dans
la fonction et là il devrait *revenir* à l'image 1
de par le gotoAndPlay(1) mais *non* ! il continue
le script ! et quel que soit le numéro de l'image
dans le "gotoAndPlay", c'est ignoré et le script
continue linéairement ! il suffit juste de faire
du pas à pas pour le voir !

C'est un bug clairement identifiable.



hummm c'est pas un bug, c'est la maniere de se comporter du player
si tu utilises this.gotoAndPlay (comme une methode donc)
ce "bug" ne devrait pas apparaitre

voir ici pour une plus longue discussion sur un probleme
similaire entre "this.stop()" et "stop()"
http://www.lalex.com/blog/comments/200410/211-fonctions-globales-ciblage.html#comments


[snip...le reste]

zwetan
Avatar
Olivier Pons
Je pense que tu n'as pas compris l'objectif.
Je comprends parfaitement le principe de
this.gotoAndPlay mais dans ce cas
ça aurait été l'objet lui-même (donc mcDetail)
et pas le movie clip principal qui aurait été
à l'image 1. Moi, je voulais faire aller
le clip principal à l'image 1 sans passer
par des appels horribles tels que "_level0."
ou encore "_root" !

"zwetan" a écrit dans le message de
news:cpp8mt$m0o$
>
> - à l'image 2 de la séquence principale :
> 1> this.onBtnDetail = function() {
> 2> mcMaster._xscale = 30;
> 3> mcMaster._yscale = 30;
> 4> gotoAndPlay(1); // juste pour un test;

this.gotoAndPlay(1); //methode de MovieClip

et non pas:
gotoAndPlay(1); //action datant de Flash v2

> 5> }
> 6> mcMaster.BtnDetail1.onRelease = this.onBtnDetail;
> à l'image 3:
> 1> stop(); // arrêter l'anim
>
> mettre un point d'arrêt aux lignes :
> - image 1 : ligne 2
> - image 2 : lignes 4 et 6
> - image 3 : ligne 1
>
> lancer l'anim.
> le mcDetail devient cliquable dès l'image 2.
> normal. en cliquant dessus on rentre bien dans
> la fonction et là il devrait *revenir* à l'image 1
> de par le gotoAndPlay(1) mais *non* ! il continue
> le script ! et quel que soit le numéro de l'image
> dans le "gotoAndPlay", c'est ignoré et le script
> continue linéairement ! il suffit juste de faire
> du pas à pas pour le voir !
>
> C'est un bug clairement identifiable.

hummm c'est pas un bug, c'est la maniere de se comporter du player
si tu utilises this.gotoAndPlay (comme une methode donc)
ce "bug" ne devrait pas apparaitre

voir ici pour une plus longue discussion sur un probleme
similaire entre "this.stop()" et "stop()"



http://www.lalex.com/blog/comments/200410/211-fonctions-globales-ciblage.html#comments


[snip...le reste]

zwetan




Avatar
zwetan
> Je pense que tu n'as pas compris l'objectif.
Je comprends parfaitement le principe de
this.gotoAndPlay mais dans ce cas
ça aurait été l'objet lui-même (donc mcDetail)
et pas le movie clip principal qui aurait été
à l'image 1. Moi, je voulais faire aller
le clip principal à l'image 1 sans passer
par des appels horribles tels que "_level0."
ou encore "_root" !




oui bah sans ces appels "horribles" comme tu le dis
ton gotoAndPlay est compris comme une action et non pas une methode

libre a toi de te creer des bugs tout seul