在单个类或多个场景中的Actionscript?

时间:2013-03-29 11:55:18

标签: class actionscript scene

我是Actionscript和Adobe Flash CS6的新手,为了一点乐趣,我决定尝试制作一个小游戏。我有一些关于一般实施方法的新手(或noob-y)问题。

我到目前为止阅读的文档建议创建一个新的flash项目,然后创建一个文档类:

package  {

    import flash.display.MovieClip;

    public class MyMainClass extends MovieClip {


        public function MyMainClass() {

        }

    }

}

我想知道我是否使用这个MainClass来编码整个游戏或在场景中包含动作脚本,并且有多个场景,或两者的某种组合。

假设我的游戏中有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
        }

    }

}

或在每个场景中使用actionscript创建5个场景? 谁能为我提供一些起点? 感谢

1 个答案:

答案 0 :(得分:1)

我不知道有谁对场景有任何好处。

但是,正如您所知,时间轴本身是一个很好的工具,用于管理Flash资产的状态。如果您使用它,您还可以获得隐藏的优势,即您无需下载100%的文件即可使用它(因此您可以通过取消选中“减少甚至消除对预加载器的需求” “在你的图书馆符号上。

Lars非常正确地指出,很少有开发人员了解这种技术,而且我知道能够并且将会帮助那些有兴趣探索这种技术的人。那个人现在正在帮助你。因此,如果您选择这样做,请记住,除非我碰巧注意到您的帖子并做出回应,否则您大部分时间都在自己身上。

支持时间轴脚本,very few exceptions。我建议采用“both and”方法,您可以使用文档类来控制时间轴实例。

您的文档类可能如下所示:

public 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来改变你的功能,但是你的主文档类(在这个例子中是游戏)会意识到这种变化(可以在不改变游戏的情况下进行其他更改)。