0

我需要关于我应该如何做这件事的建议。我有一个大型应用程序,其中所有代码都在 frame1 的主时间线上。我已经开始尝试将代码放入类文件中,并告诉某些影片剪辑组件将这些类文件用于他们的代码。到目前为止,我大多是成功的,但也许这不是我应该做的。

主时间轴上有 8 个按钮,分别命名为 O1 到 O8。然后,我的库中有一个movieclip 组件,其中有自己的一组O1 到O8 按钮。这个组件已经被添加到舞台它自己的层并赋予实例名称battleDashboard。当它是一大块代码(没有分类)时,我曾经访问过这样的按钮。

O1 //主界面主时间线上的按钮battleDashboard.O1 //battleDashboard组件内的按钮

自创建类以来,我一直在使用“this.O1”访问组件内的按钮。类文件使用 BattleDashboard 影片剪辑组件的属性面板链接。它应该在战斗发生时调用,然后返回主界面,完成后隐藏自身。

由于我在这个应用程序中有超过 10,000 行代码,我真的希望组件有自己的单独代码。我发现我必须重写很多函数并将它们包含在曾经共享的类文件中。我还必须花时间使用“公共函数集”复制对象和变量,然后使用自定义事件检索它们。我是否最好将其全部留在主时间线上并仅将外部文件作为文件?

4

1 回答 1

0

这个问题无法回答,因为它......如果所有代码都不是基于 OOP 并且驻留在时间轴上,为什么要制作单独的类文件?请更具体。尝试从您的应用程序制作对象时遇到什么问题???

通常,您的主 .fla 文件的文档属性中需要一个主类。这个 mainClass 应该扩展 MovieClip。这是 org/Main.as 中的一个示例 在文件夹中创建一个空的 flash 文件,然后在其中创建一个名为“org”的文件夹。将此代码放在此文件夹中名为 Main.as 的文件中,并在文档类属性中将 org.main 设置为 main Class。在动作面板中 fla 的第一帧:

var aVarOnFirstFrame:String = "some variable value";

此示例向您展示如何调用 Flash 电影的主容器以及您的类如何与 doc 交互。我希望这会有所帮助。

您将看到如何调用变量和方法。

package org {
import flash.display.DisplayObjectContainer;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
public class Main extends MovieClip{

    private var mainStageObject:DisplayObjectContainer;
    private var theStage:Stage;

    public function Main(){
        mainStageObject = this.parent;
        theStage = this.stage;
        // Let's call this :
        trace(this + " == \"[object Main]\"\nAND NOT \"[object MainTimeLine]\"");
        trace("which is the default if no main class is specified for the .fla root Document")
        // this.stage is a shortcut to the top level element
        trace(this + ", paced on " + this.parent + " == " + this.stage + " == " + theStage);
        trace("comparaison for the three calls : ");
        var equalityParentStage:Boolean = (this.parent === this.stage);
        var equalityStageAndTheStage:Boolean = (this.stage === theStage);
        var equalityParentAndTheStage:Boolean = (this.parent === theStage);
        var equalityDisplayOContainer:Boolean = (this.parent === mainStageObject);
        var equalityForAllThreeProps:Boolean = ((this.parent === this.stage) && (this.stage === theStage) && (this.parent === mainStageObject));
        trace("this.parent === this.stage ? " + equalityParentStage);
        trace("this.stage === theStage ? " + equalityStageAndTheStage);
        trace("this.parent === theStage ? " + equalityParentAndTheStage);
        trace("this._parent ==== mainStageObject ? " + equalityDisplayOContainer);
        trace("this.parent === this.stage === theStage === mainStageObject ? " + equalityForAllThreeProps);
        this.addEventListener(Event.ADDED_TO_STAGE,onMainIsOnStage,false,0,false);
        this.addEventListener(Event.ACTIVATE,onMainIsActivated,false,0,false);
    }
    private function onMainIsOnStage(e:Event):void{
        trace(e.target.aVarOnFirstFrame);
        // -> outputs : null;
    }
    private function onMainIsActivated(e:Event):void{
        trace(e.target.aVarOnFirstFrame);
        // -> outputs : some variable value;
    }
}
}

/*
[object Main] == "[object Main]"
AND NOT "[object MainTimeLine]"
which is the default if no main class is specified for the .fla root Document
[object Main], paced on [object Stage] == [object Stage] == [object Stage]
comparaison for the three calls : 
this.parent === this.stage ? true
this.stage === theStage ? true
this.parent === theStage ? true
this._parent ==== mainStageObject ? true
this.parent === this.stage === theStage === mainStageObject ? true
null
some variable value
*/
于 2012-05-11T14:39:28.743 回答