Flash AS 教程-动画事件

平面设计 2025-03-05 16:34www.168986.cn平面设计培训

动画事件的奇妙之旅

在数字世界中,我们渴望赋予物体生命力,让它们在屏幕上舞动。这一切,得益于动画事件,特别是enterFrame事件,它使得每一帧都能引发一场奇妙的动作。在ActionScript 3(AS 3)中,这个魔法变得更加简单。只需添加一个enterFrame事件的侦听器,就可以开启这场动态视觉盛宴。

```actionscript

addEventListener(Event.ENTER_FRAME, onEnterFrame);

```

别忘了导入Event类,并编写一个名为onEnterFrame的函数。你可能会好奇,仅仅一帧怎么能够触发enterFrame事件呢?实际上,这个事件并不是在物理上进入新的一帧时触发,而是Flash软件通过某种机制告诉播放头何时应该移动。可以把enterFrame事件想象成一个定时器,虽然它的精度可能不是百分百的。

让我们来看一个简单的AS 3动画示例。在这个例子中,我们创建了一个名为FirstAnimation的类,它继承自Sprite类。在这个类中,我们创建了一个名为ball的Sprite对象,并为它添加了enterFrame事件的侦听器。

```actionscript

package {

import flash.display.Sprite;

import flash.events.Event;

public class FirstAnimation extends Sprite {

private var ball:Sprite;

public function FirstAnimation() {

init();

}

private function init():void {

ball = new Sprite();

addChild(ball);

ball.graphics.beginFill(0xff0000);

ball.graphics.drawCircle(0, 0, 40);

ball.graphics.endFill();

ball.x = 20;

ball.y = stage.stageHeight / 2;

ball.addEventListener(Event.ENTER_FRAME, onEnterFrame);

}

private function onEnterFrame(event:Event):void {

// 这里编写使ball移动的代码

}

}

}

```

在AS 3之前,各种可视化对象的创建和管理方式各不相同,没有统一的层次结构。而现在,所有的可视对象都可以被统一到显示列表中。在AS 3中,所有舞台上的可见对象都继承自DisplayObject类。这意味着无论是创建Sprite影片、影片剪辑还是文本框,方法都极为相似。我们需要使用new关键字来创建任何类型的对象。例如:

```actionscript

var myTextfield:TextField = new TextField();

var myMovieClip:MovieClip = new MovieClip();

var mySprite:Sprite = new Sprite();

```

一旦创建了影片剪辑或Sprite影片,我们可以在其中直接进行绘制。例如:

```actionscript

mySprite.graphics.beginFill(0xff0000);

mySprite.graphics.drawCircle(0, 0, 40);

mySprite.graphics.endFill();

```

但是仅有这些代码还不足以在屏幕上看到效果,因为还需要一个显示列表来管理和展示这些对象。显示列表就像是一棵树,由根(舞台)开始,所有可见的对象都挂在这棵树上。当我们把对象加入舞台时,它们就成为了这棵树的一部分,从而变得可见。而这些对象中还可能嵌套着更多层的可视对象,构成了我们所说的显示列表。在 ActionScript 2 中,创建影片剪辑并将其添加到显示列表的过程相对复杂。必须明确其在显示树中的位置,一旦影片剪辑被删除,其在列表中的位置和状态便无法更改。而在 ActionScript 3 中,这一过程得到了极大的简化。当我们创建 Sprite 影片时,它们并不会自动被加入到显示列表中。这使得我们可以在它们被加入显示列表之前对其进行各种操作。

我们可以将显示对象比作舞台背后的演员,虽然观众看不到它们,但它们确实存在,随时准备走上舞台。使用 addChild 方法,我们可以轻松地将对象添加到显示列表中。在 AS3 的世界里,创建 Sprite 对象变得非常简单。例如:

```scss

var mySprite:Sprite = new Sprite();

mySprite.graphics.beginFill(0xff0000);

mySprite.graphics.drawCircle(0, 0, 40);

mySprite.graphics.endFill();

addChild(mySprite);

```

这段代码创建了一个红色的圆形 Sprite,然后将其添加到了显示列表中。如果你想改变它的位置,只需调整其 x 和 y 属性即可。

与 AS2 相比,AS3 的深度管理更为智能。虽然深度是自动管理的,但我们仍然可以使用相应的方法指定或改变深度。关于这部分的内容,我们会在实际使用时再详细介绍。使用 removeChild 方法,我们可以从显示列表中删除一个对象。值得注意的是,删除一个对象并不意味着它会被销毁,而是暂时从显示列表中移除。当重新将其添加到显示列表时,它将保持原来的状态。

以前,从一个影片剪辑中删除一个对象并把它加载到另一个剪辑中是不可能的,而在 AS3 中,这一操作变得轻而易举。实际上,一个子对象只能有一个父级。当我们将其加入到新的父级中时,它会自动从原来的父级中移除。例如,在我们的狼蚁网站SEO优化示例中:

我们有一个名为 Reparenting 的类,其中包含三个 Sprite 对象:parent1、parent2 和 ball。我们首先创建并绘制了 parent1 和 parent2 两个影片剪辑,然后将 ball 作为子对象添加到 parent1 中。当 ball 被点击时,我们使用 addChild 方法将其添加到 parent2 中,这时 ball 就会从 parent1 中自动移除并加入到 parent2 的显示列表中。这一过程无需手动删除或重载 ball 的状态,保持了其原始绘制和加载的信息。这种重定父级的功能在 AS3 中非常方便且高效。

AS3 在处理显示列表和影片剪辑方面提供了更多的灵活性和便利性,使得开发者能够更轻松地创建和管理复杂的动画和交互效果。在这部电影的世界里,我们有两个主角:parent1和parent2。它们像神秘的舞台,让影片场景在其中上演。parent1和parent2被赋予了特殊的魔力,它们可以直接将影片加入到显示列表中,就像绘制出一幅幅绚丽的画面。在这之中,一个特别的场景是绘制了一个醒目的正方形。这个正方形在影片中显得尤为突出,引人注目。

而我们的Ball影片则被巧妙地安排在了parent1之中。这意味着,Ball成功进入了显示列表,成为了观众眼中的焦点。每当Ball在屏幕上闪耀时,它都显得生动而真实。当我们的主角小球被点击时,它会立刻被神秘的力量引导,加入到parent2的影片中。这使得小球在新的场景中展现出更多的可能性,为观众带来全新的视觉体验。

值得注意的是,尽管我们没有改变Ball的x,y坐标的代码,但它的移动似乎自然而然,这是因为Ball被加载到了不同位置的Sprite影片中。这些Sprite影片就像是舞台上的布景,为Ball提供了活动的空间,使得它能够在不同的场景中自由移动。

即使我们删除了某个Sprite影片,再将其加入显示列表,我们的主角Ball仍然会出现。它的生命力似乎超越了这一切的变化,始终保持在观众眼前。这一切都归功于它的特殊魔法和奇妙的编程技巧。

在这部电影的随着“cambrian.render('body')”的指令,整个画面仿佛被注入了生命力,一切都活跃起来,生动形象地展示了数字世界的魔法和魅力。

上一篇:CAD图形怎么进行三维操作- 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by