2010-07-03 7 views
0

J'essaie de scinder mon code en cours. mais il y a un problème qui me dérange vraiment. quand je crée une classe pour les fonctions, je donne sa propre scène. comme celui-ciFlash, ActionScript 3: définir une variable comme une variable de son créateur sans utiliser constamment creator.var

dragf:Dragfunctions = new Dragfunctions(this) 

et dans la classe i utilise cette

var stage:Object; 

    public function Dragfunctions(stage:Object) 
    { 
      this.stage = stage; 
    } 

comme vous pouvez le voir, je peux maintenant appeler une variable de la scène à l'aide stage.var1 = « salut » mais quand je dois ajuster ce varable plusieurs fois ça devient un peu désordonné ...

il ya un moyen de dire que quand j'appelle var1 il sait que je veux dire stage.var1 sans avoir besoin d'appeler stage. son:

var var1 = stage.var1 

puis en utilisant

stage.var1 = var1 

mais qui est tout à fait incommode aussi est-il une meilleure façon?

+1

En regardant votre code, je pense que peut-être votre conception de classe pourrait faire avec une refonte. Peut-être votre scène est une sorte d'objet d'affichage, et je suppose que Dragfunctions est une classe qui fournit une sorte de fonctionnalité de glisser à cet objet d'affichage. Il pourrait être préférable de créer une sous-classe de DisplayObject (ou Sprite etc) et d'y implémenter les fonctions de glisser. Vous n'aurez pas besoin de tunnel les propriétés DisplayObject à travers votre classe Dragfunctions. Généralement, si vous devez réimplémenter l'interface de votre instance de classe contenue dans le conteneur, l'héritage peut être un meilleur choix. – spender

Répondre

1

Oui, utiliser des accesseurs (qui fournissent la sémantique comme champ, mais vous permettent d'exécuter une logique personnalisée lorsque l'affectation est utilisé):

function set var1(val:SomeType):void 
{ 
    stage.var1=val; 
} 
function get var1():SomeType 
{ 
    return stage.var1; 
} 
function doStuff():void 
{ 
    var1=new SomeType(); //this results in call to "set" method 
    var st:SomeType=var1; //this results in call to "get" method 
} 
Questions connexes