2013-03-29 3 views
0

Je suis complètement nouveau à ActionScript et Adobe Flash CS6 et pour un peu de plaisir, j'ai décidé d'essayer de faire un petit jeu. J'ai eu quelques questions novices (ou noob-y) à poser sur une approche de mise en œuvre générale.Actionscript dans une seule classe ou dans plusieurs scènes?

La documentation que j'ai lu jusqu'à présent suggèrent la création d'un nouveau projet flash, puis créer une classe de document afin:

package { 

    import flash.display.MovieClip; 

    public class MyMainClass extends MovieClip { 


     public function MyMainClass() { 

     } 

    } 

} 

et je me demande si j'utilise ce MainClass pour coder le jeu tout ou inclure actionScript dans une scène et avoir plusieurs scènes, ou une combinaison des deux.

Disons que j'avais voulu 5 niveaux dans mon jeu, je ferais quelque chose comme:

package { 

    import flash.display.MovieClip; 

    public class MyMainClass extends MovieClip { 


     public function MyMainClass() { 
      StartLevel1(); 
      StartLevel2(); 
      StartLevel3(); 
      StartLevel4(); 
      StartLevel5(); 
     } 

     public function StartLevel1() { 
      // Do something 
     } 
     public function StartLevel2() { 
      // Do something 
     } 
     public function StartLevel3() { 
      // Do something 
     } 
     public function StartLevel4() { 
      // Do something 
     } 
     public function StartLevel5() { 
      // Do something 
     } 

    } 

} 

ou créer 5 scènes avec actionscript dans chaque scène? Quelqu'un peut-il me donner un point de départ? Merci

+0

En général, je déconseille de construire des solutions en utilisant différentes scènes. Je pense qu'il sera plus facile pour vous d'obtenir de l'aide ici à SO et d'autres forums de développement si ce n'est pas le cas. Je fais du développement d'ActionScript/Flash professionnellement depuis plus de 10 ans et je n'ai jamais utilisé le concept de scènes, ni rencontré un projet où des collègues l'ont utilisé. Les scènes peuvent probablement être utiles si vous utilisez Flash comme un outil d'animation de timeline, mais je ne dirai jamais qu'elles sont rarement utilisées dans le développement de scripts et de jeux. –

Répondre

1

Je ne connais personne qui a quelque chose de bon à dire sur les scènes.

Cependant, à votre avis, le scénario lui-même est un outil formidable pour gérer l'état de vos éléments Flash au fil du temps. Si vous l'utilisez, vous bénéficiez également de l'avantage caché que vous n'avez pas à télécharger 100% de votre fichier pour pouvoir l'utiliser (vous pouvez donc réduire ou même éliminer le besoin d'un préchargement en décochant "Exporter en frame N «Sur les symboles de votre bibliothèque,

Lars a fait remarquer à juste titre qu'il y a très peu de développeurs qui comprennent cette technique, et je connais exactement celui qui peut et qui va aider ceux qui sont intéressés à explorer cette technique. Donc, si vous choisissez d'aller dans ce sens, gardez à l'esprit que vous êtes la plupart du temps seul, sauf si je remarque votre message et y réponds

Je ne suis pas , avec un very few exceptions. Je suggère est une approche " both and", où vous utilisez une classe de document pour contrôler les instances de la chronologie.

Votre classe de document pourrait ressembler à ceci:

 
    pubic class Game extends MovieClip { 
     protected var _level:ILevel;//Interface your Level MovieClips will implement 
     protected var levelController:LevelController = new LevelControler(); 
     protected var currentLevel:int; 
     protected var maxLevels:int = 5; 

     public function Game() { 
      levelController.addEventListener(LevelEventKind.LEVEL_COMPLETE, nextLevel); 
      levelController.addEventListener(LevelEventKind.LEVEL_FAILED, gameOver); 
      startLevel(currentLevel); 
     } 

     public function startLevel(levelNumber:int):void { 
      goToLabel('Level' + String(levelNumber)); 
     } 
     public function get level():ILevel { 
      return _level; 
     } 
     public function set level(value:ILevel):void { 
      _level = value; 
      //internally, this should release all listeners to the last 
      //level object (if any) so you don't get a memory leak 
      levelController.level = _level; 
     } 
     protected function nextLevel(e:Event):void { 
      if (currentLevel < maxLevels) { 
       startLevel(++currentLevel); 
      } else { 
       //do you won logic here 
      } 
     } 
     protected function gameOver(e:Event):void { 
      //do bombed out logic here 
     } 
     protected function goToLabel(label:String):void { 
      for each (var frameLabel:FrameLabel in currentLabels) { 
       if (frameLabel.name==label) {  
        //if your swf is media-heavy, may want to check that frame 
        //is loaded if you chose to reduce/eliminate preloader 
        goToAndStop(label); 
        return; 
       } 
      } 
      trace('no such label as', label); 
     } 
    } 

Qu'est-ce que cela devient vous est un jeu où vous pouvez changer la façon dont les différents niveaux semblent sans changer une seule ligne de code ActionScript, et vous pouvez changer la façon dont ils travaillez en affectant différentes classes de base qui implémentent ILevel légèrement différemment. Vous pouvez également changer votre fonctionnalité en changeant les différentes versions de LevelController, mais votre classe de document principal (jeu dans cette instance) serait consciente de ce changement (alors que les autres changements pourraient être faits sans altérer le jeu du tout).

Questions connexes