0

前段时间我曾经使用 Actionscript 2 在 Flash 上编写简单的东西。现在我正在尝试继续使用 Actionscript 3,似乎我正在设法适应这些变化。

我想知道的是我见过的很多程序员的编程方式。

例如,这段代码让我想知道一些事情:

package  {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    public class KeyExample extends Sprite {
        private var _theyArePressed:Object = { };
        public function Example() {

        }
    }
}

为什么要使用“包”?我总是在电影的第一帧放一些AS,就是这样,现在这样做有错吗?

然后我看到他们导入了一些东西,但据我所知,我可以轻松使用这些东西而无需导入任何东西,那么这里有什么意义呢?

关于精灵?我很想知道它们是干什么用的。。

提前致谢

4

6 回答 6

1
package

这一行定义了您要定义的类所属的包或集合。它反映了保存类的 .as 文件相对于 FLA(或其他源路径)的位置。包背后的想法是为您的类提供更多上下文并避免类名冲突。例如,您可以制作自己的Sprite类并将其放入自己的包中。

还有一个internal命名空间可用于使一个类仅可用于同一包中的其他类。

import package.Class;

这一行将外部类引入到当前类定义中。与默认情况下所有可用的东西相比,这似乎很烦人,但它可以使用packages并具有许多优点:

  • 它提供了可读性——您可以通过浏览导入语句的顶部列表来确定每个类中正在使用哪些类。
  • 如果您在两个不同的包中有两个名称相同的类(例如,如果您创建自己的 Sprite 类),您可以定义您想要的类。
  • 您可以轻松更改 import 语句以引用不同包中完全不同的同名类。

当您处理与另一个位于同一包中的类时,您不需要使用导入,您只需要导入不同包中的类

关于精灵?我很想知道它们是干什么用的。。

Sprite是一个内建类,继承自DisplayObject,意思是用来表示可以通过显示列表绘制到屏幕上的图形。它MovieClip比内置 DisplayObjects 层次结构的传统低一层,如下所示:

在此处输入图像描述

这意味着这SpritesMovieClips将它们呈现到屏幕所涉及的过程以及它们用于保存信息的内存要轻。两者之间的主要区别在于,MovieClips 有帧,而 Sprites 没有,这意味着您不会有类似Sprite 的方法gotoAndStop()或属性。currentFrame

获得最大结果的想法是尽可能地向上移动这棵树,通过更轻、更简单的类使用最少的资源。

于 2013-02-27T23:11:16.917 回答
1

用简短的 SO 风格回答来回答您的问题并不容易。

最好,只需搜索一些 OOP Flash 教程。可以在这里找到:http: //active.tutsplus.com/tutorials/actionscript/as3-101-oop-introduction-basix/

简而言之(简化答案):

  • package是 AS3 中代码的一种编写方式,它描述了文件相对于项目的位置(再次,简化答案)。例如,您可以将一些 .as 文件放在文件夹 ( don/graphics/shapes) 中,因此包名称为don.graphics.shapes.
  • import如果您在外部文件中编写代码,则需要填充。如果在框架中编写代码,Flash IDE 可以在后台导入一些类,因此import可以省略一些语句。
  • SpriteMovieClip没有时间线的。好吧,它还有更多功能(例如,它不是动态的),但在大多数情况下,“没有时间线的电影剪辑”就足以知道了。
于 2013-02-27T17:03:24.893 回答
0

如果您想要任何 .fla 供您的 Class 使用,请执行以下操作:

1:将 .as 文件放在指定目录中。这个目录是包的顶部。

2:点击Flash-首选项

在此处输入图像描述

3:点击ActionScript3.0设置... 在此处输入图像描述

4:链接到你的目录。 在此处输入图像描述

现在可以在任何地方使用。

于 2013-02-27T17:00:19.683 回答
0

使用DocumentClassand Classes(保存在包中)通常可以使源代码更清洁、更易于维护、可互换,并且可以更好地分组工作。所以只有那里的优势;)

您需要所有导入,因为与时间轴脚本不同,默认情况下几乎没有导入任何类。

Sprites就像MovieClips没有Frames. 所以它们更轻巧。因此,如果您不需要框架,请使用Sprites

顺便说一句,在您的代码段中,功能名称应以小写字母开头;)

于 2013-02-27T17:00:50.450 回答
0

我们使用包的原因是为了避免命名冲突。我可以创建一个名为 button 的类并在我的组件包中使用它,另一个开发人员可以创建一个名为 button 的类并将其放入他的包中。这样我们就可以在同一个项目中使用这两个按钮而不会发生任何冲突。

我们使用 import 语句在编译时引入这些类,不使用 import 类是不可用的。这样做的原因是,您的项目中可能有一个包含大量类的大型库,但您只想使用一定数量的类,如果您不使用 import,那么它们都将被包含在内,并且生成的 swf 将比只导入所需的类要大。

阅读这篇文章以获得深刻的理解。

如果您需要使用 addChild 等将某些内容添加到显示列表中,则可以使用 Sprite 类。Sprite 就像没有时间线的 MovieClip,因此它不包含多个帧。您在应用程序中使用的第一个类必须能够显示某些内容,因此扩展 Sprite 通常是常态。

阅读本文以了解显示列表以及可以附加到它的类。

于 2013-02-27T17:05:02.340 回答
0

包是分离代码的好方法。如果您有一个想要在多个项目中使用的按钮,您可以将其设为一个类。这遵循 OOP 方法,因为您正在抽象逻辑的不同部分。

类无法访问所有内容,因此您需要导入其他类。如果你想使用键盘,那么你只需要导入它的类。

于 2013-02-27T17:02:24.410 回答