永发信息网

如何用AS3.0,实现影片剪辑自动围绕一个中心旋转,并可从外部XML文件中添加影片剪辑

答案:1  悬赏:50  手机版
解决时间 2021-05-07 21:55
  • 提问者网友:战皆罪
  • 2021-05-07 08:50

本人想要实现一种这样的效果,在外部XML文件中可以添加影片剪辑,FLASH中的影片剪辑自动围绕一个中心点旋转,但当每个影片剪辑旋转半圈时,就会自动隐藏,外部不管添加多少个影片剪辑,都可以在FLASH上按顺序旋转,要求要用AS3.0。本人一菜鸟,望高手指点一下,先谢了!

最佳答案
  • 五星知识达人网友:傲气稳了全场
  • 2021-05-07 09:33

Flash CS3 AS3声音视频高级编程


http://www.enet.com.cn/eschool/video/flashas3/


用AS3代码表现倾斜角与斜率


http://www.jcwcn.com/article/2009/0902/flash_31984_1.html



http://www.jcwcn.com/article/special/200906/special_59.html


http://webdesign.chinaitlab.com/List_1364.html


使用时间线,你可以很直观的制作一些动画,而利用一些脚本,就可以控制舞台上的影片剪辑。那更为灵活的是什么呢?一个动态的影片剪辑既不是使用时间线,也不是使用现有舞台上的。
这些影片剪辑单独的存在库中,这篇文章将告诉你如何的动态的调用他们。
例如:点击以下蓝色的矩形,你会看到一个圆在你点击的区域逐渐的出现和消失。这个圆只有在你的鼠标点击的情况下才能添加到舞台上并运动的。这篇文章将会告诉你如何绘制和保存到库中。


开始


首先,你需要创建一个能够动态载入的影片剪辑。在这里,只是简单的创建了一个实心的蓝色圆,在库中,类名称为BlueCircle,如果你不知道如何来做,以下的介绍将会帮助你解决。
如果你已经知道了如何来创建一个圆,并以BlueCircle的类名保存到库中,请跳到下一页直接看代码。


创建一个BlueCircle影片


以下的介绍将会解释如何创建一个影片并指定该蓝色圆为动态载入。
1、首先,在Flash CS3中创建一个文档,在属性面板中,设置文档的宽高为300和200像素。


2、使用圆形工具在舞台上画一个圆,蓝色填充。


3、在圆形被选择的前提下,按F8或者点击<修改>-<转化为元件>。转化为元件的窗口就会出现。在名称一栏中输入circle,类型选择影片剪辑。


先不要急着点OK。来做一下更多的修改。
4、从转换为元件的窗口中,找到链接的标示,如果你没有看到,点一下<高级>按钮来显示他。选择<为ActionScript导出>.,替换掉在Class一栏中所显示的内容为BlueCircle。
基本类一栏将会自动的显示出来。但是如果没有显示,你可以输入上图那样的flash.display.MovieClip。
5、点击OK关闭该窗口,在库中你会看到你新创建的新元件。


如果你没有看到库,按一下Ctrl+L来显示他。
6、到这里,你的圆形影片剪辑已经保存到了库中,而你的舞台上有一个它的复制品,删除他,这样舞台上就什么都没有了。
添加代码


在时间线上右击,选择脚本。将以下的代码复制到脚本窗口中:
function Main() {
// 为舞台添加鼠标事件的监听
stage.addEventListener(MouseEvent.CLICK, AddCircle);
}
Main();
function AddCircle(e:MouseEvent):void
{ // 在舞台上添加一个圆
var newCircle:BlueCircle = new BlueCircle();
this.addChild(newCircle);
// 设置圆的x,y的位置
newCircle.x = mouseX;
newCircle.y = mouseY;
// 设置圆的缩放比例和透明度。
newCircle.scaleX = 0;
newCircle.scaleY = 0;
newCircle.alpha = 0;
// 添加Enter_Frame事件的监听
newCircle.addEventListener(Event.ENTER_FRAME, ZoomCircle);
}
function ZoomCircle(e:Event):void
{ // 获得点击得圆
var circleMC:MovieClip = MovieClip(e.target);
// 增加缩放。
circleMC.scaleX += .05;
circleMC.scaleY += .05;
//到达一定比例后,透明度减弱
if (circleMC.scaleX < 2)
{ circleMC.alpha += .03;
} else { circleMC.alpha -= .03;
// 圆几乎消失后,删除事件
if (circleMC.alpha < .1)
{ circleMC.removeEventListener(Event.ENTER_FRAME, ZoomCircle);
}
}
}


ctrl+Enter运行该动画,如果你点击影片的任何位置,你会看到你在第一章中看到的效果。
分析代码
现在你已经有了动画,让我们来看一下代码的细节,你可以对如何制作一个动态的影片剪辑有一个更好的想法。
让我们先走Main函数开始
function Main() {
// 为舞台添加鼠标事件的监听
stage.addEventListener(MouseEvent.CLICK, AddCircle);
}
Main();


Main函数在动画首次运行时被调用。函数中非常重要的一行(只有一行)是我为鼠标事件添加了事件的监听:
stage.addEventListener(MouseEvent.CLICK, AddCircle);


为了监听事件,你首先需要指派一个对象扮演监听者。在这里,我指派了舞台为监听者。为了达到有效的监听,你也需要知道监听什么,在以上的代码中,我监听MouseEvent.CLICK事件。
一旦你发现你监听到了,你也许需要做什么。最简单的方法就是创建一个包含做什么的函数。这里,我调用AddCircl函数来处理你监听到的事件。
到现在,我告诉舞台去监听鼠标事件,如果它听到了点击(MouseEvent.CLICK)事件,便调用AddCircle函数。
好了,结束对事件监听的讨论,来说说所调用的AddCircl函数。先来看一下该函数的定义:
function AddCircle(e:MouseEvent):void { . . . . }


并不像其他的函数调用,一个函数被调用是依靠一个事件句柄需要适合某种特殊的特征。首先,他必须作为一个(唯一的一个)事件类型的参数。第二、他没有返回值,所以返回的类型必须是void。
AddCorcle是适合这两个标准的。他作为MouseEvent事件类型的参数。而MouseEvent是的基类就是Event类。函数也没有返回值,所以他的返回类型设置为void。
现在,来看一下整个AddCircle函数。
function AddCircle(e:MouseEvent):void
{ // 在舞台上添加一个圆
var newCircle:BlueCircle = new BlueCircle();
this.addChild(newCircle);
// 设置圆的x,y的位置
newCircle.x = mouseX;
newCircle.y = mouseY;
// 设置圆的缩放比例和透明度。
newCircle.scaleX = 0;
newCircle.scaleY = 0;
newCircle.alpha = 0;
// 添加Enter_Frame事件的监听
newCircle.addEventListener(Event.ENTER_FRAME, ZoomCircle);
}


第一部分处理的是添加BlueCircle并显示在舞台上。所有的这些都在我的"AS3.0中如何显示库中内容"的文章中有讲解。这里就不再赘述了。需要注意的是对新圆的引用是newCircle。也许要注意x-scale和y-scale的首字母大写。透明度设置为0。
这篇文章的最有意思的一行是添加了一个ENTER_FRAME事件监听newCircle影片剪辑。
newCircle.addEventListener(Event.ENTER_FRAME, ZoomCircle);


添加事件监听的格式想必你已经清楚了,过去AS2中的onEnterFrame和enterFrame现在换成了Event.ENTER_FRAME。该事件监听以你的帧频的速度来反复调用ZoomCircle函数。



AS3 外部加载的一些问题


在AS2中加载外部swf文件一般都用MovieClipLoader对象,在as3中则需要采用Loader比较方便。Loader继承


DisplayObject,因此,你可以直接在一个DisplayObject中采用addChild方法加载进来:
var loader:Loader = new Loader();
this.addChild(loader);


但是,这样你加载进来的是一个Loader,而不是Loader对象Load进来的swf,因此,你需要采用这样的方式:


var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest("lib.swf"));
function completeHandler(event:Event){
var _content:DisplayObject = event.target.content;
this.addChild(loader);
}


此外,需要注意,你无法直接监听loader对象来获取文件是否加载完毕。需要采用loader.contentLoaderInfo

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯