从最后一帧往前播放影片:
1 2 3 4 5 6 7 | mc.addEventListener(Event.ENTER_FRAME,a);//mc是运动的影片剪辑 function a(e:Event) { if (this.currentFrame == 1) { this.gotoAndStop(this.totalFrames); } else { this.prevFrame(); } |
从最后一帧往前播放影片:
1 2 3 4 5 6 7 | mc.addEventListener(Event.ENTER_FRAME,a);//mc是运动的影片剪辑 function a(e:Event) { if (this.currentFrame == 1) { this.gotoAndStop(this.totalFrames); } else { this.prevFrame(); } |
首先看下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | stop(); var tf_loadinfo:TextField = new TextField(); tf_loadinfo.autoSize = TextFieldAutoSize.CENTER; tf_loadinfo.selectable=false; tf_loadinfo.background = true; var format:TextFormat = new TextFormat(); format.font = "Arial"; format.size = 12; tf_loadinfo.defaultTextFormat = format; addChild(tf_loadinfo); root.loaderInfo.addEventListener(ProgressEvent.PROGRESS, showProgress); root.loaderInfo.addEventListener(Event.COMPLETE, loadComplete); function loadComplete(_e:Event):void { removeChild(tf_loadinfo); play(); } function showProgress(_e:ProgressEvent):void { var p:Number=_e.bytesLoaded/_e.bytesTotal; var n:Number=Math.round(p*100); tf_loadinfo.text='Loading '+n.toString()+'%'; setCenter(tf_loadinfo); } function setCenter(obj:Object) { obj.x =(stage.stageWidth-obj.width)/2; obj.y =(stage.stageHeight-obj.height)/2; } |
这里有个loaderInfo要介绍下,一下内容来自Flash CS3的F1帮助文档:
LoaderInfo
包 flash.display
类 public class LoaderInfo
继承 LoaderInfo EventDispatcher Object
语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9
LoaderInfo 类可提供有关已加载的 SWF 文件或图像文件(JPEG、GIF 或 PNG)的信息。 LoaderInfo 对象可用于任何显示对象。 提供的信息包括加载进度、加载程序的 URL 和加载内容、媒体的字节总数以及媒体的标示的高度和宽度。
您可以通过以下两种方法访问 LoaderInfo 对象:
flash.display.Loader 对象的 contentLoaderInfo 属性 — contentLoaderInfo 属性始终可用于任何 Loader 对象。 对于尚未调用 load() 或 loadBytes() 方法,或者尚未充分加载的 Loader 对象,在尝试访问 contentLoaderInfo 属性的多个属性时,将引发错误。
显示对象的 loaderInfo 属性。
Loader 对象的 contentLoaderInfo 属性提供有关 Loader 对象正在加载的内容的信息,而 DisplayObject 的 loaderInfo 属性提供有关该显示对象的根 SWF 文件的信息。
使用 Loader 对象(SWF 文件或位图)加载的对象的 loaderInfo 属性引用与 Loader 对象的 contentLoaderInfo 属性相同的 LoaderInfo 对象。 换句话说,LoaderInfo 对象是加载的对象文件与加载它的 Loader 对象之间的共享对象。 由于 SWF 文件的主类的实例没有 Loader 对象,因此,loaderInfo 属性是访问 SWF 文件主类实例的 LoaderInfo 的唯一方法。
注意到没?SWF 文件米有contentLoaderInfo 对象~
在使用flash map作地图缩放的时候,出现了一个很恼人的问题,
就是在图面上进行鼠标滚轴滚动时,整个页面会跟着卷动,
造成地图对象上上下下的跑,要不时的去调整,
这对使用者来说会很烦燥。
要解决这个问题,必须在地图对象上取消页面的预设卷动事件,
为了让地图对象发布时不必在页面上加上javascript码,
我选择了把javascript码全部嵌在actionscript中,
如此一来,不论地图对象放在那个网页上,都能很快的正常运作。
下面是程序代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // 要执行的javascript码 private static var _jsInit:XML = <script> <![CDATA[ // 参数为地图物件的object id function (objId) { // 取得地图对象的参考 var obj = document.getElementById(objId); // 滚轮事件的处理函式 function preventDefault(e) { // 下面的程序代码让滚轴事件发生在地图对象时,就取消预设的页面卷动行动, // 可以在ff,ie上执行 if (window.event) { window.event.returnValue = false; } if (e && e.preventDefault) { e.preventDefault(); } } // 挂上事件处理,这里的作法可在大多数的主要浏览器上执行,包括ff,ie if (obj.addEventListener) { obj.addEventListener('DOMMouseScroll', preventDefault, true); } else if (obj.attachEvent) { obj.attachEvent('onmousewheel', preventDefault, true); } else { obj['onmousewheel'] = preventDefault; } } ]]> </script> ; // 执行javascript程序代码 ExternalInterface.call(_jsInit, ExternalInterface.objectID); |
2010年8月27日更新:加入数个Flash游戏、物理、3D引擎和UI组件,加入1个Flash开发框架。
2010年8月25日更新:继续删除和修正链接,合并类别,加入了Flash游戏引擎,增加官方在线中文帮助。
2010年8月24日更新:删除和修正了许多链接,修改了介绍,合并了类别,加入了Flash物理引擎类别。
官方在线中文帮助
有兴趣的可以先到下面这页面看看PV3D的例子
Flash游戏引擎(部分内容来自)
Flex Explorer来自
应用








package{
public class Coin extends AllData {
public function Coin() {
this.buttonMode = true;
this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener);}
public function mouseDownListener(event:MouseEvent):void {
topPosition = numChildren – 1;
setChildIndex(this,topPosition)
this.startDrag();
}}}
AllData是一个文档类,public class AllData extends MovieClip
想在鼠标点的时候,深度到最上层
但报错
ArgumentError: Error #2025: 提供的 DisplayObject 必须是调用者的子级。
at flash.display:
isplayObjectContainer/setChildIndex()
at Coin/mouseDownListener()
解决分析:
当然不行了,错误不是明确告诉你了吗?setChildIndex的对象必须是调用者的子级嘛,不能自己把自己设为最高的,也就是说setChildIndex的目标对象,必须是当前容器的子级
而且这样子的话,也只是把目标对象放在本容器的其他对象的最上层,如果该容器本身上方还有其他显示对象,这个方法也无效的,除非你向上遍历,把所有的父容器也都用同样的方法放在最上层去,当然还要看你的具体需求了,如果只是针对同一个容器的对象,那么用parent.setChildIndex(this,…)应该可以。
Error #2044: 未处理的 IOErrorEvent:。 text=Error #2032: 流错误。
at _fla::MainTimeline/_fla::frame1()
代码很简单的, 我就只是在第一帧加入如下代码:
它的意思是,我必须处理可能出现的io异常。所以我们必须添加侦听器:
sywj.addEventListener( IOErrorEvent.IO_ERROR, function error(event:IOErrorEvent){
// 这里就用来处理io错误,至于出不处理是你的事。
});
TweenLite下载地址:http://www.greensock.com/as/greensock-tweening-platform-as3.zip
如果下载地址失效,请到官网下载 http://blog.greensock.com 找地址下载 ![]()
为什么要用TWEENLITE而不用ADOBE官方的TWEEN?
用法:
TweenLite.to(target:Object, duration:Number, variables:Object);
Description:将target对象的属性从调用方法时的值缓动到variables中所指定的值
Parameters:
//2者效果是一样的(通常情况下是不需要加引号的 TweenLite.to(mc, 5, {x:"10", y:"20", ease:Elastic.easeOut}); TweenLite.to(mc, 5, {x:"20", y:"30", ease:Elastic.easeOut});
特殊属性:
//mc会在y=20处停留3秒,然后在5秒内缓动到当前位置 TweenLite.from(mc, 5, { y:20, ease:Elastic.easeOut, delay:3, renderOnStart:false } ); //mc会在当前位置置停留3秒,然后跳到y=20的位置开始缓动 TweenLite.from(mc, 5, { y:20, ease:Elastic.easeOut, delay:3, renderOnStart:true } );
TweenLite.from(target:Object, duration:Number, variables:Object);
基本上同TweenLite.to()方法一样,唯一不同的是所指定的缓动的属性是起始值
TweenLite.delayedCall(delay:Number, onComplete:Function, onCompleteParams:Array);
提 供一个简单的方法来实现在指定的秒数之后调用指定的方法(其作用相当于setTimeout()方法,如果单为了实现setTimeout的功能而给你的 代码增加3K的重量,实在不值,但是如果项目中已经引入了TweenLite,使用这个方法是个不错的主意),可以传递任意个数的参数
Parameters:略…
TweenLite.killTweensOf(target:Object, complete:Boolean);
提供一个简单的方法来移除应用在对象上的所有缓动效果,可以指定是否立即强制结束
Parameters:
target:目标对象
complete: 如果设为true,目标对象的缓动效果将会立即结束(缓动的属性直接变为缓动效果结束时的值,同时调用onComplete方法如果定义了的话),若设为 false,同样会立即结束缓动效果 ,但是属性值将停留在当前缓动到的位置,onComplete函数也不会执行
TweenLite.killDelayedCallsTo(function:Function);
提供一个简单的方法来移除TweenLite.delayedCall方法中设置了的方法(其作用相当于clearTimeout)
Parameters:略..
TweenLite.removeTween(tween:TweenLite):void
回收指定的TweenLite的实例
Parameters:略.
示例:
import gs.TweenLite; import gs.easing.Back; TweenLite.to(clip_mc, 5, { alpha:0.5, x:120, ease:Back.easeOut, delay:2, onComplete:onFinishTween, onCompleteParams:[5, clip_mc] } ); //注意这里的参数,分别对应前面onCompleteParams数组中的类型,而不是Array型 function onFinishTween(parameter1_num:Number, parameter2_mc:MovieClip):void { trace("The tween has finished! parameters: " + parameter1_num + ", and " + parameter2_mc); }
源码包中也有2个很不错的例子~包含了大部分的用法在里面
About TweenLiteVars
Jack Doyle在7月15日的更新中加入了类TweenLiteVars,目的是为了让人们可以在FB,FD,FDT等编辑器中可以使用代码提示而不用去记众多的属性,并且能提供更加严谨的数据类型控制。TweenLiteVars类可以在TweenMax源码包中找到。
TweenLiteVars的用法如下:
import gs.TweenLite; import gs.utils.tween.TweenLiteVars; import gs.easing.*; var v:TweenLiteVars = new TweenLiteVars(); //with addProps(), you can add up to 15 dynamic properties at a time. addProp() adds one at a time. v.addProps("x", 300, false, "y", 100, true); v.ease = Elastic.easeOut; v.onComplete = myFunction; TweenLite.to(my_mc, 2, v);

由于当AS3加载AS2时,AS2会在AMV1中运行,
AS3文件跟AS2文件互相都不可以进行操作(跟两个swf独立运行无区别)..
我们常用的解决方法是使用LocalConnection作为他们之前的桥梁..
实现通信进行操作..
下面的例子..
先给AS3进行LocalConnection的运行,,让他处理连接状态(就像一个服务端)
然后AS2使用LocalConnection中的send,调用AS3中的方法
AS3的文档类:
package {
import flash.display.*;
import flash.net.*;
import flash.text.*;
public class AS3Class extends Sprite{
private var server:LocalConnection
public function AS3Class(){
init()
}
private function init():void{
//初始化
server = new LocalConnection()
//建立一个本地连接,名字随意,取一个不会取与人重复的名字就ok了
server.connect("_AS3_L4cd_2008_08_02")
//指定this为LocalConnection的client,这样才可以调用this中的方法(重要)
server.client = this
}
//随便定义一个方法,不带参数的,需要设置为public(重要)
public function m1():void{
txt.appendText("\rAS3:m1")
}
//随便定义一个方法,带一个参数,需要设置为public(重要)
public function m2(_name:String):void{
txt.appendText("\rAS3:m2,caller name:"+_name)
}
}
}
AS2中的代码
var caller:LocalConnection
//初始化对象,由于这里只需要调用别的LocalConnection的方法,所以这里不需要connect
caller = new LocalConnection()
//调用_AS3_L4cd_2008_08_02(AS3中connect的名字)中的m1
caller.send("_AS3_L4cd_2008_08_02","m1")
//调用_AS3_L4cd_2008_08_02(AS3中connect的名字)中的m2,前把"L4cd.Net"传到m2的第一个参数
caller.send("_AS3_L4cd_2008_08_02","m2","L4cd.Net")
另外提供两给国外已经封装好了的处理这种问题的类包:
SWFBridge: Easier AS3 to AS2 Communication,另一个是FlashInterFace。
使用 LocalConnection 类可以创建一个 LocalConnection 对象,该对象可在一个 SWF 文件中或多个 SWF 文件间,调用另一个 LocalConnection 对象中的方法。 通过本地连接,可以在 SWF 文件之间进行这种通信,而不使用 fscommand() 或 JavaScript。LocalConnection 对象只能在运行于同一台客户端计算机上的 SWF 文件之间进行通信,但这些 SWF 文件可以在不同的应用程序中运行。例如,一个 SWF 文件在浏览器中运行,而另一个 SWF 文件在放映文件中运行。
ActionScript 3.0 中创建的 LocalConnection 对象可以与 ActionScript 1.0 或 2.0 中创建的 LocalConnection 对象通信。反之亦然:ActionScript 1.0 或 2.0 中创建的 LocalConnection 对象可以与 ActionScript 3.0 中创建的 LocalConnection 对象通信。Flash Player 可自动处理不同版本 LocalConnection 对象间的通信。
若要了解如何使用 LocalConnection 对象在两个 SWF 文件之间进行通信,了解每个文件中使用的命令非常有用。 一个 SWF 文件被称为发送方 SWF 文件;此文件包含要调用的方法。 发送方 SWF 文件必须包含一个 LocalConnection 对象和对 send() 方法的调用。 另一个 SWF 文件被称为接收方 SWF 文件;此文件为调用方法的文件。 接收方 SWF 文件必须包含另一个 LocalConnection 对象和对 connect() 方法的调用。
很实用的功能,通过动态加载子SWF,并根据自己需要传参数,然后显示,当点击子SWF按钮,调用父SWF里的方法卸载子SWF
.
父swf代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | var connect:LocalConnection; connect=new LocalConnection(); connect.client=this; try { connect.connect('_M'); } catch (err:ArgumentError) { } var player:Number; var loader:Loader var url:URLRequest=new URLRequest("subSWF.swf"); btn1.addEventListener(MouseEvent.CLICK,onEnter1); btn2.addEventListener(MouseEvent.CLICK,onEnter2); btn3.addEventListener(MouseEvent.CLICK,onEnter3); function onEnter1(e:MouseEvent) { player=1; loader=new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoader); loader.load(url); } function onEnter2(e:MouseEvent) { player=2; loader=new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoader); loader.load(url); } function onEnter3(e:MouseEvent) { player=3; loader=new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoader); loader.load(url); } function onLoader(e:Event) { addChild(loader); connect.send('_N',"create_game",player); connect.addEventListener(StatusEvent.STATUS,onStatus); } function onRemove() { removeChild(loader); loader.unload(); } function onStatus(event:StatusEvent):void { switch (event.level) { case "status" : trace("加载传参数成功"); break; case "error" : trace("加载传参数失败"); break; } } |
子swf代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | var mc1:MC; var mc2:MC; var mc3:MC; var conn:LocalConnection=new LocalConnection(); conn.client= this; try { conn.connect("_N"); } catch (error:ArgumentError) { } btn.addEventListener(MouseEvent.CLICK,onReturn); function onReturn(e:MouseEvent) { conn.close() conn.send('_M',"onRemove"); conn.addEventListener(StatusEvent.STATUS,onReturnStatus); } function create_game(a:Number) { trace("输出参数-----"+a); if (a==1) { mc1=new MC(); addChild(mc1); mc1.x=100; mc1.y=300; } else if (a==2) { mc1=new MC(); addChild(mc1); mc1.x=100; mc1.y=300; mc2=new MC(); addChild(mc2); mc2.x=300; mc2.y=300; } else if (a==3) { mc1=new MC(); addChild(mc1); mc1.x=100; mc1.y=300; mc2=new MC(); addChild(mc2); mc2.x=300; mc2.y=300; mc3=new MC(); addChild(mc3); mc3.x=500; mc3.y=300; } } function onReturnStatus(event:StatusEvent):void { switch (event.level) { case "status" : trace("返回成功"); break; case "error" : trace("返回失败"); break; } } |
最新评论