嗨,新朋友,很高兴认识你,欢迎来到我的博客。

使flash时间轴回放

从最后一帧往前播放影片:

?View Code ACTIONSCRIPT
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();
	}

AS3加载自身swf的方法

首先看下代码:

?View Code 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
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 对象~

在网页中鼠标滚动的干扰swf问题

在使用flash map作地图缩放的时候,出现了一个很恼人的问题,
就是在图面上进行鼠标滚轴滚动时,整个页面会跟着卷动,
造成地图对象上上下下的跑,要不时的去调整,
这对使用者来说会很烦燥。

要解决这个问题,必须在地图对象上取消页面的预设卷动事件,
为了让地图对象发布时不必在页面上加上javascript码,
我选择了把javascript码全部嵌在actionscript中,
如此一来,不论地图对象放在那个网页上,都能很快的正常运作。

下面是程序代码

?View Code 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);

Flash&Flex大全

2010年8月27日更新:加入数个Flash游戏、物理、3D引擎和UI组件,加入1个Flash开发框架。

2010年8月25日更新:继续删除和修正链接,合并类别,加入了Flash游戏引擎,增加官方在线中文帮助。

2010年8月24日更新:删除和修正了许多链接,修改了介绍,合并了类别,加入了Flash物理引擎类别。
官方在线中文帮助

Flash 3D

Flash物理引擎

Flash游戏引擎(部分内容来自)

  • flixel
    帮助组织游戏对象,更快的四叉树,更准确的碰撞,更简洁的API,加上所有的旧版flixel的经典功能:动画精灵,砖阶地图和和粒子生成器。简单介绍 功能列表
  • FlashPunk
    速度相当快的2D bitmap游戏引擎。可惜zrong在不翻墙的情况下打不开它的网站
  • pushbuttonengine
    内置Box2D库,提供大量的源码和文章供学习。简单介绍
    Pushbutton引擎的特色有很多,包括建立游戏的模块片段,而不是整体式的应用;使用第三方类库更加容易;提供核心功能比如资源管理器、日志管理、调试检测、序列号、时间管理、全局命名对象等等;相关的组件包括基于Box2D的物理引擎、游戏常用的健康值组件、团队组件、状态机组件、贴图系统、路径查找类库、基本的网络联机和通讯服务; 将来会提供编辑器,以及网络联机组件,这两个组件都是收费组件; 该游戏引擎的官方网站还列出了组件商店的介绍,作为该组织出售组件和广大开发者出售组件的场所,这不失为一个好的商业模式。
  • mecheye-as3-libraries
    作者可能已经放弃开发了,zrong不推荐使用
  • AS3 ISO LIB
    As3isolib包含了工具、原型和视图。As3isolib开发起来很简单、快速,所以使开发者能集中在实际的应用中,而不是去学习复杂的API。zrong:ISO是Isometric的缩写。
  • TheoWorlds
    TheoSDK是一套基于original Theo Isometric Engine的引擎,它让你快速创建自己的基于地图的游戏。
  • FFlimation
    这个项目的主要目的是提供一个稳定的开发平台,这样游戏设计师就可以忘记游戏渲染引擎把精力集中在游戏内容的细节方面。从“关卡制作”的角度来看,这个引擎的可用性非常的高。
  • Citrus Engine
    Citrus 引擎是一种基于as3和box2d的flash滚屏平台游戏引擎。Cirus引擎能让设计师和开发者非常快速的容易的创建滚屏平台游戏(又叫横版过关游戏)象超级玛丽。团队可以用citrus引擎给游戏门户制作广告游戏,市场推广游戏,搏逸游戏等等。
  • Yogurt3D
    Yogurt3d的核心部分,swiftgl,是开源并且与opengl兼容。这意味着有opengl开发经验的开发者很容易的就可以开发出3d flash游戏和应用程序。他还可以轻易的将opengl代码转化成swiftgl并在flashplayer中运行。

UI组件与布局管理

  • AsWing
    AsWing是一套UI组件框架,纯ActionScript开发的组件框架(有ActionScript2和ActionScript3版本),也包含一些常用的工具类,目的是让Flash/Flex开发人员方便的开发出想要的应用程序界面。另外AsWing还提供SkinBuilder和
    GuiBuilder工具用于制作Skin和可视化编辑生成界面。目前AsWing团队专注于ActionScript3版本的开发和维护。AsWing以 BSD协议发布,不管你是商业还是非商业,都可以自由免费使用.
    zrong最近就在用AsWing做东西。看完AsWing的架构才发现,Flex4的spark组件引以为傲大肆宣传的layout,其实AsWing早就这么做了。
    不过,最近zrong在用AsWing开发的时候,又碰到过许多莫名其妙的问题,找不到什么解决方案,目前准备放弃。
  • Minimal Comps
    一套小巧可爱的纯AS组件,除AsWing外的又一选择。zrong发现纯AS的UI组件并不多,貌似除了AsWing也就只有这套了。快速查看组件界面和效果
  • Base UI
    纯AS实现的布局框架,功能很全,配合Minimal Comps再好不过了。快速查看布局效果
  • FlexLib
    一套包含很多FLEX高级组件的开源类库。包含这些组件:AdvancedForm, Base64Image,EnhancedButtonSkin, CanvasButton, ConvertibleTreeList, Draggable,Slider, Fire, Highlighter, HorizontalAxisDataSelector ImageMap,PromptingTextInput, Scrollable Menu Controls, SuperTabNavigator,Alternative Scrolling Canvases, Horizontal Accordion, TreeGrid,FlowBox, Docking ToolBar 。
  • FlexMDI
    是一个在Flex中轻松创建多窗口(MDI)的一个框架,提供了很多功能,包括拖拽,最大化,最小化,各种效果等。
    现在FlexMDI已经整合进入FlexLib组件,成为其中的一个包flexlib.mdi MDIManager介绍 flexmdi中的效果
  • vancura-AS3-libs
    提供纯AS3组件的皮肤和样式的集合。支持Scale9Bitma
  • BrowserCanvas
    提供容易的方式动态修改Flash尺寸大小
  • senocular Layout class
    除了布局工具,还有其他许多有用的工具
  • Yahoo ASTRA: ActionScript Toolkit for Rich Applications
    这是Yahoo开发的一套RIA组件包,包含以下内容

  • EnFlash 仅支持AS2
  • XMCA 仅支持AS2
  • BIT Component Set 商业组件 $99
  • GhostWire Components 商业组件 标准版$149 精简版$99

Tween

ActionScript3.0 API

ActionScript 1.0/2.0

ActionScript编辑器

  • FDT
    FDT是Flash Development Tool 的简称,是非常优秀的ActionScript编辑器。它不是一个独立软件,而是Eclipse
    一个插件。它支持高级的代码自动完成功能,具有强大的实时错误检测和除错功能,可以导入Flash的帮助文件,实现同Flash一样方便的帮助信息等等。
    功能强大,但不是免费的。
  • SEPY ActionScript Editor
    强大的开源AS编辑器,使用python开发。最近一次更新是在2007年2月10日,估计没戏了。
  • FlashDevelop
    小巧免费的AS编辑器,基于.NET开发,启动快速,免费。zrong推荐

Flex Explorer来自

Flex开发框架

  • Cairngorm
    是为方便FLEX开发企业级应用而开发的一个微架构。假如项目比较复杂,需要3个开发员以上来共同开发,Cairngorm是一个最正统的选择(官方推
    荐),虽然开始时有点难学。而做小型项目或项目是由你自己一个人开发的话,那就用PureMVC吧。
    不过即使开发不使用它,也可以参考它的源码,毕竟Iteration:two的大量企业级应用的design patterns还是很值得学习的。
  • PureMVC zrong就用这个
  • ARP
  • MVCS
  • Flest
  • Model-Glue:Flex
  • ServerBox Foundry
  • Guasax
  • Slide
  • Luke Bayes
  • Ali Mills
  • SomaUI

解密

加密

外壳

视频

服务器软件

  • Red5
    可以用来替代Flash Media Server(原Flash Communication Server)
  • OneTeam Media Server又一个FMS替代品 来自
    1. 支持流式播放实时或已录制好的媒体内容
    2. 支持录制实时内容
    3. 支持AS3 SharedObject共享对象
    4. 支持Clustering集群
    5. 支持用Erlang/OTP编写应用程序模块
  • TightVNC
    并非Flash专用,提供远程控制服务
    参见FlashVNC
  • vnc2swf
    将VNC的内容保存成SWF

开发

应用

Flash Remoting

  • FluorineFx
    Flash Remoting for .NET,开源
  • amfphp
    Flash Remoting for PHP,开源
  • OpenAMF
    JAVA Flash Remoting
  • rubyamf
    RubyAMF is an open source flash remoting gateway for rails. It plugs
    directly into your controllers with render :amf.
  • weborb
    包含.NET、JAVA、PHP和 Ruby on Rails版本的Remoting

Flash几个酷站

  • graphita
    在线图片编辑网站,可以在上传的照片上写写画画。采用Flex技术制作。
    graphita_s.jpg
  • Halo 3
    Microsoft制作的游戏介绍网站。
    halo3_s.jpg
  • myabodo:see your world change
    Abodo 是一个基于 Flash 技术,面向孩子们的网络应用工具。可以指导孩子们动手制作一个绿色化的家园,家长们也可以一起参与,这个平台模拟一个比较真实的环境,对于家居的每一部分都可自由选定和设置,也会即时反馈出这些组件对于环境有什么影响。寓教于乐,同时对于家居与环境保护的问题,也有一定的参考性。来自网谈
    abodo_s.jpg
  • CREAKTIF !
    wwwcreaktifcom_s.jpg
  • floorplanner 家居平面设计的网上天堂
    您是不是刚刚买了新的房子?是不是最近搬进了新的办公室并且正在烦恼怎样装修您的房间?那么,在您身边就有一种简单的方法可以使您展放愁眉,消除烦恼,并且为您的房间注入新鲜活力。 Floorplanner是一款操作简单的创作,分享家居平面设计的在线程序。仅仅几分钟,您便可以应用一系列操作简单的绘制工具随心所欲的布置安排您的家居并且完成一幅家居平面设计了。不仅如此,您还可以保存,打印您的作品,并且与您的家人,朋友或同事共同分享。
    floorplanner 家居平面设计的网上天堂
  • 用Flash造飞机
    下面文字来源于d.CAT
    這個網站上有個造飛機的玩具,user只要畫 2d 的線條,它就會自動轉成 3d 的飛機零件,也就是說只要會畫線,就可以造出自已專屬的飛機,當然能不能飛上去或平安降落那是另一回事。
    這個網站重要的特點在於,那個 2d 轉 3d 的部份是用 Papervision3D 做的,這算是到目前為止所有 PV3D 的應用中,唯一一個讓我覺得真正有意義的,因為它新奇,有趣,讓 3d 模型製作這種原本一般人難以學習或接觸的事變的輕鬆,可以迅速獲得滿足與歡樂,再考量它骨子裏用的3D技術等難度,要在科技與使用者經驗間取得良好的 balance,這作網站真可稱作上上乘之作。
  • Volkswagen UK

setChildIndex动态调整深度问题

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()

代码很简单的, 我就只是在第一帧加入如下代码:

  1. var yydz:URLRequest = new URLRequest("http://我的网站/hbjspace/music/simcoder.mp3");
  2. var sywj:Sound=new Sound();
  3. sywj.load(yydz);
  4. sywj.play();

它的意思是,我必须处理可能出现的io异常。所以我们必须添加侦听器:

sywj.addEventListener( IOErrorEvent.IO_ERROR, function error(event:IOErrorEvent){
    // 这里就用来处理io错误,至于出不处理是你的事。
});

TweenLite学习资料

TweenLite下载地址:http://www.greensock.com/as/greensock-tweening-platform-as3.zip
如果下载地址失效,请到官网下载 http://blog.greensock.com 找地址下载 :grin:

为什么要用TWEENLITE而不用ADOBE官方的TWEEN?

  • 效率(这也是作者所标榜的TWEENLITE2大优点之一,呵呵,“标榜”这个词用得可能有点过了,不过人家确实有那个实力)这里有2者运行效率对比的例子:tweening-speed-test
  • onComplete, onStart, onUpdate 等回调方法是TWEEN所没有的(TWEENLITE还可以往这些方法中传递任意个参数)
  • 智能的alpha(当alpha达到0时,TWEENLITE会自动将对象的visible设为false)
  • 在一次方法调用中就可以缓动多个属性
  • 可以设置每一次缓动的延时(对有先后顺序的缓动很有效)
  • 实现任何MovieClip/Sprite的变色效果非常简单
  • 可以缓动MovieClip的声音
  • 唯一的from()方法使你可以使用当前的属性值作为缓动的目标值
  • 使用相关联的值
  • 在一次方法调用中就可以缓动多个数组的值
  • TWEENLITE默认会自动地覆盖同一个对象的缓动以免出现冲突(当然这个特性也是可以关闭的)
  • 强大的delayedCall()方法使你可以随意设置延时和延时过后所调用的变量,甚至传递任意个数的参数
  • TWEENLITE有一个更加powerful的大哥”TweenFilterLite”,而TWEEN只在孤军奋战…当TWEENLITE有什么搞不定的时候,直接去找他大哥.

用法:
TweenLite.to(target:Object, duration:Number, variables:Object);
Description:将target对象的属性从调用方法时的值缓动到variables中所指定的值
Parameters:

  • target:要缓动的对象(这里注意类型是Object,并不仅仅是MovieClip和Sprite)
  • duration:持续的时间(单位是秒)
  • variables: 一个Object,包含你想要缓动的所有属性(在TweenLite.from()方法中,这些变量表示的则是开始缓动时的值),如果你给某个属性加引 号,它将关联到当前的值。例如y:”xxx”,无论你引号里指定多少,它只会缓动到当前的值或者从当前的值开始缓动(在 TweenLite.from()方法中)
//2者效果是一样的(通常情况下是不需要加引号的
TweenLite.to(mc, 5, {x:"10", y:"20", ease:Elastic.easeOut});
TweenLite.to(mc, 5, {x:"20", y:"30", ease:Elastic.easeOut});

特殊属性:

  • delay:Number-延时几秒后开始缓动,这在有先后顺序的缓动效果中很有用
  • ease:Function-应用在variables上的缓动函数,比如gs.easing.Elastic.easeOut。默认值是Regular.easeOut.当然你也可以应用CustomEase来定义自己的缓动函数(CustomEase属于收费内容)
  • easeParam:Array-给缓动函数提供额外参数的数组。这在使用Elastic缓动函数时控制其他参数比图振幅和周期会非常有用(ADOBE官 方文档中,Elastic.easeXX()方法是可以有6个参数的,但是在TweenLite中只提供4个参数,那么另外2个参数:周期和振幅就可以在 这个数组中给定)。大部分的缓动函数是只有4个参数的,所以通常情况下是不需要传入easeParams参数的。
  • autoAlpha:Number-效果和改变”alpha”值一样,但是多了一个特性:如果alpha最终变为0,则自动将visible设为false。同样如果autoAlpha的值大于0,则在开始缓动前会自动将visible设为true
  • visible:Boolean-缓动效果结束时DisplayObject对象的visible属性
  • volume:Number-缓动对象的SoundTransform属性(例如MovieClip/SoundChannel/NetStream等)
  • tint:uint-改变DisplayObject对象的色调,设置一个要缓动到的16进制的颜色值(在from()函数中表示起始值)
  • removeTint:Boolean-表示是否要取消一个应用在DisplayObject对象的tint属性
  • frame:int-缓动MovieClip到指定的帧(在from()函数中表示起始帧)
  • onStart:Function-在缓动开始时触发此方法
  • onStartParams:Array-数组,装有传递给onStart方法的参数
  • onUpdate:Function-当属性值发生改变时(缓动进行中的每一帧,每一秒)触发此方法
  • onUpdateParams:Array-数组,装有传递给OnUpdate方法的参数
  • onComplete:Function-在缓动效果结束时触发此方法
  • onCompleteParams:Array-数组,装有传递给onComplete方法的参数
  • persist:Boolean-如果设为true,在缓动效果结束时,TweenLite实例将不会被垃圾回收器自动回收。当然,persist为true的时候,这个缓动效果仍然可以被其他的缓动覆盖。默认值是false
  • renderOnStart:Boolean-在调用TweenLite.from()函数并且还有一个延时的时候,如果想要让指定的起始属性值在延时结 束之后才展现出来的话,将renderOnStart设为true,相反,如果设为false,在延时开始之时就会立即展现指定的起始属性值。默认值是 false
    //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 } );

  • overwrite:Boolean-如果不想让这个缓动效果被应用在同一个对象上的其他缓动效果自动覆盖的话,请将这个值设为false

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);

利用LocalConnection使AS3与AS2通信

由于当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


						

swf之间相互通信调用方法并传参数

使用 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代码:

?View Code 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
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代码:

?View Code 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
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;
	}
}