2010-05-24 5 views
0

Faire une page flash qui peut faire défiler ces trois images sur le clic de souris. Pour une raison quelconque les changements locaux au compte ne sont pas reflétés sur le global. J'ai essayé _global mais la syntaxe était étrange et m'a donné des erreurs. Comment devrais-je l'implémenter?Incrémenter la variable globale sur click in flash, actionscript 3

import flash.events.Event; 

var images:Array = ["images/image.jpg", "images/image2.jpg", "images/image3.jpg"]; 
var count:int = 0; 

forward.addEventListener(MouseEvent.CLICK, loadPhoto); 


function loadPhoto(evt:Event){ 

    if(count>2){ 
     count = 0; 
    } 

    trace(count); 
    imageFrame.source = images[count]; 

    count++; 

} 

Une version simplifiée du problème percevraient trace à la sortie le nombre de fois que vous avez cliqué.

import flash.events.Event; 

var count:int = 0; 

forward.addEventListener(MouseEvent.CLICK, clickHandler); 

function clickHandler(evt:Event) 
{ 
    trace(count); 
    count++; 
} 

Répondre

1

Toute chance que le code est dans un cadre qui est en cours d'exécution à plusieurs reprises? (parce que vous avez manqué un stop() quelque part, par exemple)

Si tel est le cas, vous pourriez avoir un problème que vous n'avez pas remarqué et qui cause ce comportement étrange. Un moyen simple de vérifier si cela se produit est d'ajouter un trace("test") après avoir déclaré count (ou avant, mais mettez-le dans ce script de trame).

+0

probablement le problème, laissez-moi vérifier – msandbot

+0

comment ne pas le mettre dans un cadre? désolé je suis nouveau au flash – msandbot

+0

Une manière est de définir une classe. Mettez votre code là et liez votre Movieclip dans la bibliothèque à cette classe. –

1

Cela devrait fonctionner correctement. Je suppose que par la façon dont le code est écrit, c'est sur la ligne de temps et non dans une classe. Il ne devrait faire aucune différence -

essayer cependant référence à la variable « compter » à l'intérieur de votre fonction avec le ce

Il peut sembler quelque chose comme:

function loadPhoto(evt:Event){ 

    if(this.count>2){ 
     this.count = 0; 
    } 

    trace(this.count); 
    imageFrame.source = images[this.count]; 

    this.count++; 

} 

Il est plus bavard et pédant, mais votre code initial devrait fonctionner correctement. Je pourrais ajouter - ce code n'utilise pas la variable 'count' en dehors de la fonction, alternative à la déclarer - est le problème, le compteur est toujours '0' lorsque la fonction est exécutée?

+0

oui c'est le problème actuel – msandbot

+0

J'essaie de garder une trace de l'endroit où je suis dans le tableau. Il y aura des boutons qui vont en avant 1 et en arrière 1. Ils ont besoin de savoir quelle image est actuellement affichée. En ce moment et avec le this.count ajouté dans le compte est toujours zéro. – msandbot

3

Je pense que votre problème est de portée générale. Essayez ceci:

import flash.events.Event; 

var images:Array = ["images/image.jpg", "images/image2.jpg", "images/image3.jpg"]; 
var count:int = 0; 

forward.addEventListener(MouseEvent.CLICK, clickHandler); 


function clickHandler(evt:Event) 
{ 
    loadPhoto(); // Notice, this is calling a function already defined on root! 
} 

function loadPhoto() 
{ 
    trace(count); 
    // Use modulous to deal with this type of behavior -- it is easier in the end. 
    imageFrame.source = images[count%images.length]; 

    count++; // Count should be within scope here. 
} 
+0

c'est toujours toujours zéro, j'aime bien le module mais Merci – msandbot

+0

+1 pour la bonne programmation. – Glycerine

Questions connexes