- 在线时间
- 1947 小时
- 专家
- 0
- UID
- 182221
- 注册时间
- 2005-6-4
- 帖子
- 1781
- 精华
- 1
- 积分
- 7933
- 离线
- 1 天
专长: PHP,MySQL,ActionScript
- 帖子
- 1781
- 体力
- 7596
- 威望
- 65
|
发表于 2007-11-8 20:17:40
|显示全部楼层
首先声明:本人大菜鸟一个,刚接触AS3不久,许多理念还没来得及灌输,这些case都是从网上down的,但因为解说是英文的,不利我们学习,我就充当一个translater,顺便可以让自己巩固一下知识。
水平有限,错误难免,欢迎大虾小虾,大鸟小鸟指正。
下面进入正题:
案例1:熟悉新的事件机制和addChild的运用
说明:拖动小人到滑板上,然后拖动滑板,可以发现小人已经跟滑板粘在了一起。
演示:http://www.live-my-life-with-yuyi.com/as3_cases/changing_parents/
代码:
- boarder_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
- boarder_mc.addEventListener(MouseEvent.MOUSE_UP, drop);
- red_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
- red_mc.addEventListener(MouseEvent.MOUSE_UP, drop);
- blue_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
- blue_mc.addEventListener(MouseEvent.MOUSE_UP, drop);
复制代码
AS3采用了新的监听机制,而且注意到对每个mc的鼠标按下弹起都使用了相同的函数,这就需要在函数里判断事件的发生者,从而做出相应的处理。
- function drag(event:MouseEvent):void
- {
- if(event.target.name == "boarder_mc")
- {
- addChild(boarder_mc);
- event.target.startDrag(true);
- boarder_mc.x = mouseX;
- boarder_mc.y = mouseY;
- }
- else
- {
- event.target.startDrag();
- }
- }
复制代码
通过event.target.name来取得事件发生的对象名,AS3里没有了root,addChild相当于把某个mc搬到了舞台上,其实是TimeLine0.addChild(mc),同时保证该mc是在舞台的最顶层(AS3里没有了深度管理)。
通过event.target来获取事件发生的对象
接着来看drop函数
- function drop(event:MouseEvent):void
- {
- event.target.stopDrag();
- if(boarder_mc.hitTestObject(red_mc))
- {
- red_mc.addChild(boarder_mc);
- boarder_mc.x = 0;
- boarder_mc.y = 0;
- }
- else if(boarder_mc.hitTestObject(blue_mc))
- {
- blue_mc.addChild(boarder_mc);
- boarder_mc.x = 0;
- boarder_mc.y = 0;
- }
- }
复制代码
当鼠标弹起时,啥也不管,先停止拖动,如果小人和滑板有重合区域,则将小人放到滑板里,滑板就像一个container,boarder_mc成了red_mc的child,将boarder_mc的x坐标和y坐标清零是为了将小人放到滑板的正确位置。
如果小人已经成为了滑板的child,那么再次拖动滑板时,由于又执行了一次addChild(boarder_mc);所以滑板的父类又变成了舞台。
整个案例1的分析到此结束,涉及的知识点不多,主要是熟悉一下AS3的语法。
<我是分隔线>----------------------------------------------------------------------------------------------------</我是分隔线>
案例2:熟悉addChild和removeChild在不同的swf之间的运用,以及loader的用法
说明:点击picture会载入另一个swf,点击载入的swf上的一个按钮,该swf消失。
演示:http://www.live-my-life-with-yuyi.com/as3_cases/different_movies/
代码:
swfA(也就是按钮所在的flash)
- var loader:Loader = new Loader();
- loader.load(new URLRequest("Popup.swf"));
- picture_btn.addEventListener(MouseEvent.CLICK, showPicture);
- function showPicture(event:MouseEvent):void
- {
- addChild(loader);
- }
复制代码
AS3里用loader代替了loadMovie,load的时候不能直接添加路径名,需要通过URLRequest来载入。
整段代码都很简单,首先载入Popup.swf,然后给监听按钮的click事件定义一个showPicture函数,这个函数的功能很简单,通过addChild把刚刚载入的swf放到舞台上。
swfB(载入的flash->Popup.swf)
- close_btn.addEventListener(MouseEvent.CLICK, closeWindow);
- function closeWindow(event:MouseEvent):void
- {
- this.parent.parent.removeChild(this.parent);
- }
复制代码
很简洁,监听close按钮的click事件,事件触发时调用closeWindow函数,这里用到了parent,简单分析一下,由于这个swf已经被载入到另一个swf里,所以this.parent应该指代的是loader,而this.parent.parent则指代的是TimeLine0,也就是舞台。所以这句话也就比较好理解了:从舞台上卸下载入该swf的loader。
案例2分析到此结束。
<我是分隔线>----------------------------------------------------------------------------------------------------</我是分隔线>
案例3:熟悉tween以及tweenEvent的运用
说明:点击标签载入特定的图片说明(其实是一个mc,只是坐标不同),同时还有渐隐渐现效果,没做loading,可能载入会有点慢。
演示:http://www.live-my-life-with-yuyi.com/as3_cases/dynamic_with_events/
代码:
初始化,给一些变量赋值
- import fl.transitions.Tween;
- import fl.transitions.easing.*;
- import fl.transitions.TweenEvent;
- var homeX:Number = -301;
- var homeY:Number = 110;
- var newsX:Number = -17;
- var newsY:Number = -777;
- var aboutX:Number = -1354;
- var aboutY:Number = -445;
- var xTween:Tween;
- var yTween:Tween;
- var inTween:Tween;
- var outTween:Tween;
复制代码
先是导入一些需要用到的类,然后定义几个坐标,这几个坐标都是一个大mc的不同位置。
然后是初始化tween类,并对tween类监听。
- xTween = new Tween(main_mc,"x",Strong.easeInOut,main_mc.x,homeX,2,true);
- yTween = new Tween(main_mc,"y",Strong.easeInOut,main_mc.y,homeY,2,true);
- inTween = new Tween(main_mc.home_mc,"alpha",None.easeNone,0,1,.5,true);
- outTween = new Tween(main_mc.home_mc,"alpha",None.easeNone,1,0,.5,true);
- xTween.addEventListener(TweenEvent.MOTION_FINISH,fadeIn);
- xTween.addEventListener(TweenEvent.MOTION_START,fadeOut);
- home_btn.addEventListener(MouseEvent.CLICK, navigate);
- news_btn.addEventListener(MouseEvent.CLICK, navigate);
- about_btn.addEventListener(MouseEvent.CLICK, navigate);
复制代码
实例化xTween,yTween后并不会马上就运行,如果在之后的代码发现了stop动作的话。这些参数跟AS2并没有多大差别。
xTween和yTween是实现mc的缓动效果,inTween和outTween是实现渐隐渐现效果的。
这里只监听xTween而没有监听yTween,因为这两个是同时进行的所以监听一个就行了。
最后是对3个按钮的click监听。
接下来就是最关键的上面提到的几个函数
- function navigate(event:MouseEvent):void
- {
- if(event.target == home_btn)
- {
- setTween(homeX,homeY,main_mc.home_mc);
- }
- else if(event.target == news_btn)
- {
- setTween(newsX,newsY,main_mc.news_mc);
- }
- else
- {
- setTween(aboutX,aboutY,main_mc.about_mc);
- }
- }
- function setTween(tweenX:Number,tweenY:Number,tweenMC:MovieClip):void
- {
- xTween.begin = main_mc.x;
- yTween.begin = main_mc.y;
- xTween.finish = tweenX;
- yTween.finish = tweenY;
- tweenMC.alpha = 0;
- inTween.obj = tweenMC;
- xTween.start();
- yTween.start();
-
- }
- function fadeIn(event:TweenEvent):void
- {
- inTween.start();
- outTween.obj = inTween.obj;
- }
- function fadeOut(event:TweenEvent):void
- {
- outTween.start();
- }
复制代码
先来看看navigate函数,这是被3个按钮共同调用的函数,通过判断不同的target.name设置不同的setTween。
再来看看setTween,参数tweenX和tweenY是目标坐标,tweenMC是目标mc,通过设置begin,finish,obj参数来改变xTween和yTween的初始坐标,目标坐标,作用对象,最后调用start函数开始运动。
fadeIn函数的作用是使inTween开始,并且将inTween作用的对象赋予outTween,这样outTween被调用的时候就能作用在正确的mc上了。
[ 本帖最后由 lzyy 于 2007-11-11 21:20 编辑 ] |
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
-
总评分: 威望 + 3
查看全部评分
|