2009-06-06 8 views
1

Je charge une image et l'ajoute au MC someMC. Si "quelque chose" est vrai, someVariable obtient le numéro someMC scaleX. Disons que c'est 0.82.Problème de variable globale

Ce dont j'ai besoin, c'est de placer ce nombre dans la valeur de mon objet Slider. Puisque je veux que la valeur de curseur soit là où mon échelle d'image est.

Ceci bien sûr ne fonctionne pas en raison des limitations de la portée variable.

J'ai essayé de définir la variable en haut du code comme ceci: var someVariable: Number; mais cela n'a pas fonctionné non plus.

Voici le code:

function completeHandler(event:Event):void{ 
    if (something) { 
      var someVariable:Number = this.someMC.scaleX; 
    } 
} 


var s:Slider = new Slider(); 
s.maximum = 500; 
s.minimum = 10; 
s.value = someVariable; 

Toute pensée?


Mise à jour
Je suis à la recherche d'une solution sans avoir à utiliser l'emballage et la classe, puisque je ne suis pas encore stable avec AS3.

Update 2
I've uploaded all the code to Pastebin. Take a look ;)

+0

Si je suis dans un MovieClip et que j'ai déjà importé le global.as aurais-je besoin de l'importer dans le clip? –

Répondre

1

Le this dans votre fullHandler n'est pas le document. Essayez juste someMC.scaleX, et en supposant que vous l'avez déclaré sur votre timeline principal ou ailleurs, il devrait y avoir accès. La propriété scaleX est également comprise entre 0 et 1, donc si votre Slider est de 10: 500, cela ne fonctionnera pas. Je mets * 100 là-dedans pour vous, mais faites tout ce qui est mathématique nécessaire pour fixer l'échelle à ce que vous aviez l'intention.

De même, vous devez définir explicitement la valeur du curseur dans le gestionnaire, plutôt que de simplement modifier la variable var. Les variables ne sont pas passées comme ça dans AS3.

function completeHandler(event:Event):void{ 
     if (something) { 
        var someVariable:Number = someMC.scaleX; 
        s.value = someVariable * 100; 
     } 
} 


var s:Slider = new Slider(); 
s.maximum = 500; 
s.minimum = 10; 
1

Le problème est fonction de gestionnaire ne dispose d'aucune information sur l'endroit où votre curseur est. La variable s que vous avez là n'est pas vraiment globale non plus, elle est locale dans votre classe ou movieclip. Lorsque le gestionnaire est exécuté par du code en dehors de votre MovieClip, il n'y a pas de contexte this sauf si vous utilisez une méthode d'une classe.

La meilleure façon de le faire est d'utiliser une classe. Créez s en tant que variable membre sur la classe, puis votre gestionnaire pourra être référencé en utilisant this. Quelque chose comme le code ci-dessous devrait le faire. Assurez-vous de le relier à une bibliothèque movieclip également.

package { 
    import flash.display.MovieClip; 

    class MyMovieClip extends MovieClip { 
     public var s:Slider; 

     public function MyMovieClip { 
      var s:Slider = new Slider(); 
      s.maximum = 500; 
      s.minimum = 10; 

     } 

     function completeHandler(event:Event):void{ 
      if (something) { 
       var someVariable:Number = this.someMC.scaleX; 
       this.s.value = someVariable 
      } 
     } 
    } 
} 
+0

kekoav: Voir les mises à jour;) –

0

Bien accidentellement, je revois votre question. (Se souvenir de moi?)

Eh bien au lieu de mise à l'échelle de l'image d'un autre domaine, vous pouvez l'échelle du chargeur, donc il n'y aura pas de problème de sécurité inter-domaine

un échantillon de travail ici: http://matrixoft.infunity.com/agent/calvin/stackoverflow/getScale.swf

code source ici: http://matrixoft.infunity.com/agent/calvin/stackoverflow/getScale.rar

[ps voir le code commenté dans la couche buttonAction, le code commenté échoue parce qu'il essaie de manipuler l'échelle d'une image d'un autre domaine. Le code après le code commenté manipule l'échelle du chargeur, pas l'image]

+0

Je ne peux pas le faire fonctionner. Pouvez-vous me montrer en utilisant mon code? http://pastebin.com/m7c37b3cf –

+0

peut-être essayer de changer la ligne 52 de this.container.addChild (event.target.content); à this.container.addChild (event.target); de sorte que vous changez le scaleX de Loader au lieu du contenu de Loader juste comme mon exemple – Unreality

+0

ainsi fonctionne-t-il? – Unreality

Questions connexes