需要一些帮助在ActionScript 3中开始使用OOD

时间:2015-09-23 15:13:51

标签: actionscript-3 flash actionscript

因此,对于AS3的新手而不是一般的开发,在我刚刚开始的最近的一个项目中,我遇到了一个直接障碍,我的正常OOD方法导致了AS3中的错误。

我在Adobe Flash中创建了一个名为code的图层,只是为了让所有内容保持独立,并且在第一帧中,我使用以下代码开始操作:

var GameContainerSize:int = 400;

class GameInfo {
    var GameID:int;
    var HomeTeam:String;
    var VisitingTeam:String;
    function GameInfo()
    {

    }
}

这个简单的代码会立即导致错误

  

场景1,层'代码',第1帧,第4行1131:不能嵌套类。

我最好的猜测是因为时间轴和它上面的所有代码都存在于一个类中。那么,如果我想使用类对象开发这个程序,我应该怎么做,或者甚至可以在flash中使用它?

2 个答案:

答案 0 :(得分:1)

您无法在时间轴上定义课程。每个时间轴都作为类导出,varfunction声明成为类的成员,帧代码被移动到自己的帧函数,当时间轴到达该帧时调用它们。因此,错误是说"你不能把一个班级放在一个班级"因为时间表已经是一个类。

要定义类,必须将外部.as文件与包块一起使用:

// GameInfo.as
package {
    public class GameInfo {
        public var GameID:int;
        public var HomeTeam:String;
        public var VisitingTeam:String;
        public function GameInfo(){ }
    }
}

在Flash Pro中,您可以将类链接到时间轴(文档或符号)。这样的类必须扩展SpriteMovieClip

您还可以从任何框架脚本中引用任何类。例如,您可以放置​​主时间轴的第1帧:

var gameInfo:GameInfo = new GameInfo();

典型的OOP会涉及几乎所有内容使用外部.as类文件,只需对时间轴帧进行最少的函数调用,例如时间轴末尾的stop()或调用您已添加的自定义函数到与时间轴相关联的班级。

答案 1 :(得分:0)

  

我创建了一个图层

那不太理想。问题是它不会让你更接近理解代码,因为它不是代码。这是Flash创作环境的一个特性。你也可以花一天时间用绘图工具绘制一些东西。

  

将所有内容分开并在第一帧中保持行动

组织很重要,但层次不是要走的路。当每个类定义进入其自己的外部文件时,如果要创建更多类,则必须创建其他文件。并且你想创建更多的类,因为只有一个是可怕的面向对象设计。在这里保持一致很重要。这就是为什么评论中的人建议使用文档类并在任何框架上都有没有代码的原因。所有代码都按类组织。没有例外 1

说了这么多,我强烈建议反对使用Adobe Flash来学习As3。幕后有太多的混淆。如果您想学习如何编写As3代码,请使用代码编辑器。 (如果您愿意,可以使用纯文本编辑器+编译器)。了解必须调整哪些设置对话框以获得您想要的内容不会让您更接近于了解As3中的OOD。

  

我也看到包,这类似于命名空间,是否需要命名,如果不是它的目的是什么?

不,包是包,命名空间是名称空间。苹果和橘子。

  • Packages用于组织类,就像结构一样 文件夹用于组织这些类的.as fiels。事实上, 该包几乎就是该文件夹结构,例如:

    • flash.display适用于所有与展示相关的课程
    • flash.events适用于活动
  • 命名空间允许您控制对类成员的访问。命名空间在As3中很少使用。关于命名空间的Here's an article from grant skinner。就个人而言,我从不需要使用名称空间。如果你是jsut入门,你现在可以很好地忽略它们。

  

听起来很完美!除了我无法在Win10机器上启动它。我可能最终会以这个比率将其外包出去

flash develop 替代编辑器。它是免费的,快速的和轻量级的。

  

我正常的OOD方法

您希望使用

扩展您的正常定义
  • 始终明确指定访问控制修饰符
  • 成员名称以小写字母开头

    public class GameInfo {
        private var gameID:int;
        private var homeTeam:String;
        private var visitingTeam:String;
    
        function GameInfo()
        {
    
        }
    }
    

1 当然,有顶级函数是没有类的几乎自由浮动函数。如果你想做oop,这不是你想要的。这是偶尔的独立效用函数。现在坚持上课。