在ActionScript3中拖动MovieClip

ActionScript3中的MovieCilp不再直接使用onPress和onRelease作为监听器了,而是使用面向对象方式的做法:addEventLisener(string,listener)

下面代码加载动态加载两个logo图片,并设置为可拖动。

var ct:MovieClip = new MovieClip();
var pc:MovieClip = new MovieClip();

var ld:Loader = new Loader();
var url:URLRequest = new URLRequest("http://www.vuo.net.cn/themes/VUO/style/images/logo.jpg");
ld.load(url);
pc.addChild(ld);

var ld1:Loader = new Loader();
var url1:URLRequest = new URLRequest("http://www.google.com.hk/images/srpr/nav_logo13.png");
ld1.load(url1);
var pc1:MovieClip = new MovieClip();
pc1.addChild(ld1);
pc1.x = 200;

pc.addEventListener(MouseEvent.MOUSE_DOWN,onpress);
pc.addEventListener(MouseEvent.MOUSE_UP,onrelease);

pc1.addEventListener(MouseEvent.MOUSE_DOWN,onpress);
pc1.addEventListener(MouseEvent.MOUSE_UP,onrelease);

function onpress(evt:MouseEvent):void{
	//使用this的话,将拖动整个舞台!
	//this.startDrag();
	evt.currentTarget.startDrag();
}

function onrelease(evt:MouseEvent):void{
	evt.currentTarget.stopDrag();
}

ct.addChild(pc);
ct.addChild(pc1);
addChild(ct);

 效果:

ActionScript3加载外部文件

在AS3中使用Loader来加载外部SWF和图像文件,Loader对象会提供一个容器来存放外部文.AS3不再充许像以前那样把外部文件加载到MC中,当然,因为as3不再有层级(_level)的概念,以加载外部SWF和图像文件到层级的方法也退役了.
(注:as1/as2中的loadMovie(),loadMovieNum(),MovieClipLoader等加载外部SWF和图像文件的法,在as3中都由Loader代替.)
创建Loader实例的方法与创建其它可视对象(display object)一样(new Loader()),然后使用ddChid()方法把实例添加到可视对象列表(display list)中,加载是通过Loader.load()方法理一个包含外部文件地址的URLRequest对象来实现的.有的DisplayObject实例都包含一个loadInfo属性,这个属性关联到一个LoaderInfo对象,此象提供加载外部文件时的相关信息。Loader实例除了这个属性,还包含另外一个ontentLoaderInfo属性,指向被加载内容的LoaderInfo属性。当把外部元素加载到Loader实时,可以通过侦听contentLoadInfo属性来判断加载进程,例如加载开始或者完成事件.
loadinof.jpg 
可以与LoaderInfo实例关联的事件有:
* complete:Event -当外部文件被加载完成时分派。complete事件通常在init事件后触发。
* httpStatus:HTTPStatusEvent-当通过HTTP协议请求加载外部文件时,且Flash Player可以检到HTTP状态的代码 。
* init:Event – 当被加载SWF文件的属性和方法可以被访问到时候触发,init事件先于omplete事件。
* ioError:Event – 由于输入/输出错误导致加载失败时触发.
* open:Event – 加载操作开始时调用。
* progress:ProgressEvent – 加载操作时接收到数据时调用。
* unload:Event – 加载对象被删除时调用。

简单示例:

var request:URLRequest = new URLRequest("content.swf");
var loader:Loader = new Loader();
loader.load(request);
addChild(loader);

上面的代码会在Loader实例中加载content.swf,当且仅当此影片被成功加载后,它才会在oader实例中显示出来,Loader实例已经被添加到可视列表中,所以这些内容也会被显示到屏上。
加载时检测错误发生:

var request:URLRequest = new URLRequest("content.swf");
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
function ioError(event:IOErrorEvent):void
{
trace(event);
}
 
try
{
loader.load(request);
}
catch (error:SecurityError)
{
trace(error);
}
addChild(loader);

这里的错误检查是用来检测加载过程中是否出现错误.
第一个是给Loader实例的contentLoaderInfo属性(不是Loader实例)关联一个ioError侦听器来获被加载元素的输入/输出错误。
第二个try-catch块,用来加载操作,Loader实例的load()方法会在下列情况下抛出ecurityError错误:
* LoaderContext.securityDomain值必须为null或者等于SecurityDomain.currentDomain。这以来你只有把要加载的文件放在受信任安全沙箱中,或者放在你自己域(需要一个策略文件),才能加载到这些文件..Loading a Cross-domain policy file
* 本地的SWF文件只能将LoaderContext.securityDomain设置为null,不充许在本地加载非本地件.
* 如果applicationDomain 或者 securityDomain 属性是一个不被信任的域。
* 本地SWF文件取不到securityDomain属性值.

建议: 注意检测错误,特别是同步(thrown)错误,因为当一个错误被抛出时, 当前程序块会迅速止执行. 同时,如果影片在debug版的Flash播放时,会抛出无法捕获的异常, 这些异常信息和步错误(那些未处理侦听事件)将出现在一个弹出对话框中.

一个preload示例:

var request:URLRequest = new URLRequest("content.swf");
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
function loadProgress(event:ProgressEvent):void
{
var percentLoaded:Number = event.bytesLoaded/event.bytesTotal ;
percentLoaded = Math.round(percentLoaded * 100);
trace("Loading: "+percentLoaded+"%");
}
function loadComplete(event:Event):void
{
trace("Complete");
}
loader.load(request);
addChild(loader);

这里的contentLoaderInfo属性用来附加侦听器.PROGRESS事件用于获得加载过程中的数据信息当加载完成时,调用COMPLETE事件.这里为了表达清晰省去的错误检查的相关代码,在实际工作不能省去的.

英文原版地址:http://www.kirupa.com/forum/showthread.php?p=2112823#post2112823

中文翻译源地址:http://flashcoder.cn/blog/index.php/archives/16

公告栏

  • 姓名:林剑锋(不见不散)
  • 来自:中国-广州
  • 简介:潮汕人,出生于广东揭西。醉心于Web开发8年,挑战了一年整体策划和网站运营。目前就职于平成混媒IT部。
  • Email/QQ:admin@ljf.cn

QQ群:设计学院 68075618,网站设计师 9908776

统计

文章:335篇
评论:163条 (2条Spam)
相册:1个 (120张图片)
主题:Nagrand新主题

www.ljf.cn网站PR查询