2013-03-29 1 views
0

Я совершенно новый для ActionScript и Adobe Flash CS6, и для немного веселья я решил попробовать и сделать небольшую игру. У меня было несколько новичков (или noob-y), чтобы спросить об общем подходе к внедрению.Действия в одном классе или в нескольких сценах?

В документации я читал до сих пор предлагает создать новый флэш-проект, а затем создать класс документа так:

package { 

    import flash.display.MovieClip; 

    public class MyMainClass extends MovieClip { 


     public function MyMainClass() { 

     } 

    } 

} 

и мне интересно, если я использую этот MainClass закодировать всю игру или включать actionscript в сцену и иметь несколько сцен, или некоторую комбинацию обоих.

Позволяет сказать, что я имел хотел 5 уровней в моей игре, я сделал бы что-то вроде:

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 
     } 

    } 

} 

или создать 5 сцен с помощью ActionScript в каждой сцене? Может ли кто-нибудь предоставить мне немного отправной точки? Thanks

+0

В общем, я бы советовал строить решения, используя разные сцены. Я думаю, вам будет легче получить помощь здесь, на SO и других форумах разработчиков, если этого не произойдет. Я профессионально занимаюсь разработкой ActionScript/Flash более 10 лет и никогда не использовал концепцию сцен или не встречал проект, в котором его использовали коллеги. Сцены, вероятно, будут полезны, если вы используете Flash в качестве инструмента анимации временной шкалы, но редко бы никогда не использовали в сценариях и разработке игр, я бы сказал. –

ответ

1

Я не знаю никого, у кого есть что сказать о сценах.

Однако, поскольку вы интуитивно, сама шкала времени является прекрасным инструментом для управления состоянием ваших активов Flash с течением времени. Если вы его используете, вы также получите скрытое преимущество, что вам не нужно загружать 100% вашего файла, чтобы иметь возможность использовать его (чтобы вы могли уменьшить или даже устранить необходимость в предварительном загрузчике, сняв флажок «Экспорт в фрейм N» «на ваших библиотечных символах.

Ларс совершенно справедливо отметил, что очень мало разработчиков, которые понимают эту технику, и я знаю точно, кто может и поможет людям, которые заинтересованы в изучении этой техники. помогите вам прямо сейчас, поэтому, если вы решите пойти таким образом, имейте в виду, что вы в основном сами по себе, за исключением случаев, когда я случайно замечу ваш пост и отвечаю на него.

Я не в пользу сценариев временной шкалы , с very few exceptions. Я предлагаю подход «both and», в котором вы используете класс документа для управления экземплярами временной шкалы.

Ваш класс документ может выглядеть примерно так:

 
    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); 
     } 
    } 

Что это получает вас игра, где вы можете изменить, как различные уровни выглядят не меняя ни одной строки ActionScript, и вы можете изменить, как они работая, назначая различные базовые классы, которые реализуют ILevel несколько иначе. Вы также можете изменить свою функциональность, заменив различные варианты LevelController, но ваш класс основного документа (игра в этом случае) будет знать об этом изменении (если другие изменения могут быть сделаны без изменения игры вообще).