Forums Développement Multimédia

Aller au contenu

Requalifier un type de variable

CODE Actionscript

5 réponses à ce sujet

#1 YopSolo

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 20 October 2013 - 09:50 AM

Bonjour,

Une fois qu'ne variable est typée en as3 existe t'il un moyen de le changer plus tard ?

j'ai besoin par exemple de transtyper un movieclip (_view:MovieClip ) générique en une version + spécialisée (_view:IntroMC)

J'y suis arrivé avec un hack (ci dessous) en créant la classe Intro qui étend la classe BaseScreen et en utilisant 2 variables privées qui portent le même nom ^^
On peut voir que cela a fonctionné si l'on fait _vew.name = "poulet"; dans BaseScreen, on retrouve bien cette valeur dans Intro, donc les 2 variables privées pointent bien sur la même référence.


package Screens
{
import flash.display.MovieClip;

/**
* ...
* @author YopSolo
*/

public class BaseScreen extends MovieClip
{
private var _view:MovieClip;

public function BaseScreen( viewRef:MovieClip )
{
_view = viewRef;
}
[...]
}
 


package Screens
{
/**
* ...
* @author YopSolo
*/

public class Intro extends BaseScreen
{
private var _view:IntroMC;

public function Intro()
{
_view = new IntroMC;
super( _view );
}

[...]

}
 



Cela m’intéresse car IntroMC possède des propriétés spécifique que l'on ne retrouve pas dans MovieClip, ce qui m'obligerait a faire (_view as IntroMC).maPropriétéSpécifique partout dans ma classe Intro, ce qui faisable mais agaçant ^^
Du coup je me dit qu'il y a peut être une notion fondamentale à côté de laquelle je suis passé.

j'ai mis le code source du projet en PJ

Fichier(s) joint(s)



#2 Goabonga

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2724 messages

Posté 20 October 2013 - 10:31 AM

j'ai pas bien compris, mais en gros tu as des properties et des fonctions commune ? si oui utilise une interface .


(ps: sauves le FLA en version 5)

#3 YopSolo

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 21 October 2013 - 08:25 AM

Merci de te pencher sur ma question :)
Dans le fla il n'y a rien a part les definitions de movieclip (IntroMC etc.)

#4 YopSolo

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 21 October 2013 - 08:25 AM

le voila

Fichier(s) joint(s)



#5 YopSolo

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 21 October 2013 - 08:28 AM

via la classe Intro j'aimerai pouvoir acceder la la propritété
_view.jouer_btn

sans avoir a faire
(_view as IntroMC).jouer_btn


j'ai réussi avec mon 'hack' et je cherche 1 moyen plus clean

#6 YopSolo

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 21 October 2013 - 09:27 AM

J'ai eu pas mal de propositions sur Twitter, donc merci les gens Image IPB

voici les modifications, dans la classe BaseScreen
BaseScreen
protected var _view:MovieClip;


Puis dans chaque Ecran (Intro.as, Game.as, GameOver.as), un getter qui caste la _view


public function get view():IntroMC
{
return _view as IntroMC;
}
 


public function get view():GameMC
{
return _view as GameMC;
}
 


public function get view():GameOverMC
{
return _view as GameOverMC;
}
 


ensuite dans le code de la classe si on se trouver dans Intro On a bien
view.jouer_btn
Dans GameOver
On a bien
view.rejouer_btn

ce qui était l'effet recherché, mais cette fois çi plus simple et sans hack :)

Fichier(s) joint(s)





1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)