2013-04-16 5 views
0

Hé les gars désolé si c'est un re-post J'ai vérifié la réponse par d'autres sites ainsi que cela mais l'information n'était pas suffisante et j'apprends encore beaucoup. Mais ma question est que j'ai ma classe de moteur qui s'appelle keepFocusEngine et une autre classe appelée mcStar je n'ai pas rencontré ce problème donc je ne comprends pas vraiment comment le faire mais je veux accéder à une variable Integer du mcStar à travers mon keepFocusEngine. Donc, dans ma classe mcStar, j'ai une variable entière appelée private var speed:Number; qui contient ceci speed = 2 + Math.random()*2;. Je souhaite modifier la variable de vitesse à ce speed = 10 + Math.random()*2; de mon keepFocusEngine par cette fonction:Accéder à une variable entière à travers une classe séparée

private function shootPlayerObject(e:TouchEvent):void 
    { 
     if (e.type == TouchEvent.TOUCH_TAP) 
     { 
      btnShootPlayer = true; 
     }else 
     { 
      btnShootPlayer = false; 
     } 
    } 

donc si le btnShootPlayer = true; je veux le speed = 10 + Math.random()*2; à invoqua. Désolé si j'ai confondu quelqu'un, je suis un peu confus moi-même haha. Mais comprenez-vous ce que j'essaie d'accomplir?

+0

vous l'avez nommé 'private', cela signifie que vous ne pouvez pas changer pendant qu'il est privé. Ce sera mieux si vous écrivez une fonction pour votre vaisseau qui serait appelée lors d'un événement spécifique, ce qui à son tour modifiera sa vitesse. – Vesper

Répondre

0

Si vous voulez le faire proprement, vous pouvez écrire des fonctions getter/setter dans votre classe keepFocusEngine. Ensuite, vous pouvez laisser votre variable speed en privé. Le getter et le setter doivent être publics, bien sûr, pour être atteints en dehors de la classe.

Dans votre keepFocusEngine, ajoutez ce qui suit:

public function GetSpeed() : Number 
{ 
    return speed; 
} 

public function SetSpeed(newspeed:Number) 
{ 
    speed = newspeed; 
} 

Ensuite, vous pouvez modifier votre code fourni dans:

private function shootPlayerObject(e:TouchEvent):void 
{ 
    if (e.type == TouchEvent.TOUCH_TAP) 
    { 
     btnShootPlayer = true; 
     keepFocusEngine.SetSpeed(10 + Math.random()*2); 
    }else 
    { 
     btnShootPlayer = false; 
    } 
} 

Si à tout moment vous souhaitez connaître la vitesse, vous pouvez utiliser keepFocusEngine.GetSpeed(). Cela facilite la programmation puisque vous avez un aperçu de votre chemin de classe. En outre, quand un getter ou un setter est appelé, vous pouvez faire ce que vous voulez dans cette fonction. S'il vous semble plus facile de toujours retourner la vitesse * 10 par exemple, un getter peut return speed*10;.

EDIT: Je voudrais faire référence à cette question: Why prefer Properties to public variables?

+0

AS3 a réellement un support pour les vrais getters et setters. 'public function set varName (valeur: DataType): void {}' et 'public function get varName(): DataType {}' –

+0

Merci Joetjah pour la réponse, essayez-le plus tard aujourd'hui et faites-vous savoir si cela a bien fonctionné! – Nathan

+0

@Apocalyptic Que voulez-vous dire par "vrai" getters et setters? Comment votre code ci-dessus fonctionnerait-il? – Nathan

Questions connexes