逐帧菜单导航与所有代码的设置

时间:2010-01-06 19:03:55

标签: flash actionscript-3 actionscript flash-cs4

对于包括闪光灯在内的任何事情,我都是程序员。我不久前开始制作游戏,有些人使用框架从主菜单导航到游戏画面等等(我不知道怎么做)。有些人将游戏封装在一个类中,并从文档类中调用它,并在需要时添加和删除它。

我只是想知道什么是最佳实践,最有益的是什么。专业人士做了什么。

4 个答案:

答案 0 :(得分:2)

使用时间表通常被认为不是最佳做法。你会发现开始编程的设计师倾向于使用时间轴,因为他们已经习惯了。从AS1或AS2开始的程序员往往会有不好的习惯。如果值得做的事情值得做的话。

使用时间轴的问题是管理变量状态。如果随后移动到另一帧(第一帧除外),则帧中声明的任何变量都将丢失。为了展示想象这个基本的例子:

在第一帧上有一个选项按钮,单击该按钮会转到另一个框架“选项”。此选项框有一个复选按钮,并声明另一个对象。它还有一个按钮返回主菜单。这就是编译器将其生成代码时的样子:

package DemoAvoid_fla
{
    import fl.controls.*;
    import flash.display.*;
    import flash.events.*;

    dynamic public class MainTimeline extends MovieClip
    {
        public var btnOptions:SimpleButton;
        public var chkHints:CheckBox;
        public var myWorld:Object;
        public var btnReturnToMainMenu:SimpleButton;
        public var declareSomeInstace:Object;

        public function MainTimeline()
        {
            addFrameScript(0, this.frame1, 1, this.frame2);
            return;
        }// end function

        public function onOptionsClick(event:MouseEvent) : void
        {
            gotoAndStop("options");
            return;
        }// end function

        function frame1()
        {
            stop();
            this.myWorld = new Object();
            this.btnOptions.addEventListener(MouseEvent.CLICK, this.onOptionsClick);
            return;
        }// end function

        public function onReturnToMainMenu(event:Event) : void
        {
            gotoAndStop("mainMenu");
            return;
        }// end function

        function frame2()
        {
            stop();
            this.chkHints.addEventListener(Event.CHANGE, this.onHintsChange);
            this.btnReturnToMainMenu.addEventListene(MouseEvent.CLICK,this.onReturnToMainMenu);
            this.declareSomeInstace = new Object();
            return;
        }// end function

        public function onHintsChange(event:Event) : void
        {
            var _loc_2:* = event.target.selected;
            trace(_loc_2);
            return;
        }// end function

    }
}

现在这就是问题所在。如果您要导航到选项页面然后返回主菜单,您最终将重置您的变量状态,因为您现在创建了我的世界的新实例(并且内存使用量上升,因为垃圾收集器不会是即时的)。您现在也在选项页面中丢失了实例。

我的菜单编码风格是将每个屏幕创建为动画片段。然后将每个动画片段放在第一帧但不同的图层上。然后我隐藏/显示我想要的图层。它也很容易从外部类控制,同样快速设计,避免我提到的任何陷阱:)

答案 1 :(得分:1)

如果你从Flash开始,只是IDE,然后学习如何编码,浏览框架是有道理的,因为它很容易理解/实现。

我能想到的唯一优势就是对象总是在那里,所以当你从一个帧到另一个帧时,一旦对象被实例化,它们就会在你身边,所以不需要删除所有东西,再添一遍。

我猜那些像Keith Peters这样的专业人士有100%的观点和菜单。一旦你准备好重用(Asobu)你的漂亮小游戏引擎(带有菜单和屏幕),时间线对于切换视图似乎毫无意义。从这个角度看,PushButtonEngine看起来很棒。

如果您正在与设计师合作,并且他/她正在设计屏幕并且时间线导航对于他/她在原型制作时更有意义,我猜测有一个中间立场。只要每个屏幕都是自己的MovieClip,在主时间轴内,您可以为每个屏幕设置一个类MovieClip并从那里继续。如果您需要为您声明舞台实例,我写了一个tiny extension,可以提供。然后,您可以继续使用优先IDE中的逻辑。

我的猜测是快速添加按钮抨击短时间游戏时间线会做得很好。如果您计划重用基本引擎并制作更复杂的游戏,那么从长远来看,动作脚本将证明是正确的决定。基本经验法则:不要无缘无故地复杂化。

答案 2 :(得分:0)

我认为使用时间表被认为不是最佳做法真的很遗憾。我觉得这主要是Adobe的错,因为当AS3 / CS3问世时,没有提供如何使用时间表来记录良好的开发实践的文档。

如果您使用时间线,您可以在嵌入式对象加载时有更多选择,这意味着您不必在电影开始之前下载如此多的代码 - 所以您没有那个长预加载器宣传你是一个编码忍者你在第1帧之前嵌入了所有内容。当然,当用户知道他们正在查看由编码忍者创建的内容时,用户会更开心,所以他们愿意等待privelege。

您可能会发现这个替代视角很有趣http://www.developria.com/2010/04/combining-the-timeline-with-oo.html

答案 3 :(得分:0)

我个人倾向于仅使用Flash IDE来创建资产SWC文件。我的所有逻辑和编译都是使用FDT完成的。编译时间更快,调试器工作

主要的例外是横幅,因为大多数广告服务公司都使用Flash扩展与后端进行通信,因此需要在IDE中工作。此外,通过横幅广告,设计师可以完成大部分工作,而且我只是在涉及无法在时间轴上完成的更复杂的交互时才真正参与其中。

底线:工作但是你尽可能舒服,但能够工作,但是你需要。