标签为 ActionScript 的存档
AS3的冒泡机制
Author: 柳世杀神·GabrielGon18 一 2008
再述冒泡思路1 在as2中发现问题,2 在as3中解决问题。3 结合问题,说明冒泡4 冒泡的问题所在以及解决方法冒泡很多人在谈,前段时间小弟也是一知半解。弄得云里雾里的。最近找到一个pdf,呵呵,才算弄明白了点。把一点学习笔记发出来。1 在as2中发现问题,我们用一个例子来发现as2中究竟有什么问题。As2中实现如下效果:舞台上一个mc,mc中一个btn点选mc实现拖动mc,鼠标松开停止拖动点选mc实现mc隐藏。最容易想到的方法,代码如下: 代码:mc.onPress = function() { this.startDrag();};mc.onRelease = function() { this.stopDrag();};mc.btn.onPress = function() { mc._visible=false};表面来看,这个思路是正确的。(实际上没什么思路可言,很简单的方法。)实际怎么样?当然是不能实现。问题来了:点击btn,不能触发btn的动作!!!!解释如下:1 因为btn处于mc内部,mc被加上了事件以后,按照as2的事件机制,mc内部的btn甚至是其他的元件都不能接受事件。或者可以认为mc的事件覆盖了mc中其他元件的事件。2 从非冒泡机制来说(as2就是非冒泡),在btn上点击鼠标,首先接受到点击事件的自然是btn的上一层(也就是mc),然后才是btn元件。Mc先接受到点击事件,触发相关的函数。然后呢?我们要实现的点击btn的效果没了。我们可以认为mc把我们的鼠标点击事件据为私有了,不再往下传递。(如果是冒泡机制的话,这个动作就回继续往下传递到btn,然后btn会执行。)那么这种效果在as2中还能实现么?答案自然是肯定的,不过方法就复杂了。这里就不讨论了。As3已经成为主流。但是as3中的冒泡机制,让我们可以简单的解决这样的难题。2 在as3中解决问题:下面来看as3中怎么实现。代码如下: 代码:import flash.events.*;mc.addEventListener(MouseEvent.CLICK,mcfunction);mc.btn.addEventListener(MouseEvent.CLICK,btnfucntion);function mcfunction(event:MouseEvent) { trace("mc click");}function btnfucntion(event:MouseEvent) { trace("btn click");}能实现了吧?看看代码就觉得,好像没用什么特别的解决方法,就加两个侦听函数,就搞定了。这个代码自然的不能再自然了,就好像做flash 先的安装软件一样。但是如此自然的代码下面,使as3的冒泡机制在提供支持。 结合问题,说明冒泡机制:Chm中有一个冒泡机制的图,相信大家都已经看过了这里我联系实例,另外做一个图,帮助各位理解。 上图为as2中的执行原理下图为as3中的执行原理 上图也就是在as3中实现我们文章开始提出的例子的工作原理。下面详细描述一下捕获阶段:鼠标在btn上发出点击事件,首先捕捉到该事件的事stage.,然后事件往下传递到mc,再到btn..(如果鼠标事件发生在btn按钮中的一个label上,那么该事件还会继续向下传递,直到找到label元件。) As2中,一旦找到了可以相应事件的函数,就停止了,不会往下传递。这个道理应该说明白了目标阶段:找到我们的鼠标最底层的目标,也就是btn以后,那么就开始执行btn的侦听函数了。 如果鼠标事件发生的所在位置,是mc中的btn中的一个label。那么将先执行label的侦听函数。(当然我们的例子中没有label)冒泡阶段:执行了目标阶段的侦听函数以后,开始冒泡。换一个说法是,返回btn的父级元件mc,如果能找到相关的侦听函数,那么就执行,如果没有,就继续往上冒泡到btn的父级元件mc的父级元件stage。看能不能找到相关的侦听函数。注意一个:首先执行的函数一定是目标对象的侦听函数。就像我们上面的例子一样,点击btn会先trace(“btn click”),然后冒泡到mc,执行trace(“mc click”)..然后继续往上,如果stage我们也加一个侦听函数,执行语句,那么还会继续执行 trace(“stage click”).到达stage顶层了,冒泡结束。说到这里,各位看官也应该明白了as3的冒泡究竟是干什么用的了4 冒泡的问题所在以及解决方法 冒泡也有问题,并不是说它有缺陷,因为出现问题无法避免。 问题在于, 假如在上面的例子中,我们不想在点击btn冒泡阶段中执行mc的侦听函数,我们只想执行btn的侦听函数。怎么解决?同样的问题延伸出去,可以得到很多扩展和应用。那么我们需要阻止他的冒泡的时候执行相关的侦听函数。Chm中的方法有 stopImmediatePropagation():void防止对事件流中当前节点中和所有后续节点中的事件侦听器进行处理。stopPropagation():void防止对事件流中当前节点的后续节点中的所有事件侦听器进行处理。用来修改我们上面的例子代码如下: 代码:import flash.events.*;mc.addEventListener(MouseEvent.CLICK,mcfunction);mc.btn.addEventListener(MouseEvent.CLICK,btnfucntion);function mcfunction(event:MouseEvent) { trace("mc click");}function …
《ActionScript 3.0 making things move》
Author: 柳世杀神·GabrielGon16 一 2008
看了一下keith peters的ActionScript 3.0 making things move样张,实在令人佩服与惊叹果然这些东西还是老外写的好啊!怎么说呢?更加符合“人脑工程学”,呃~是,你很可能没听过这个词。我是说-很符合思维导图的模式,嗯……再简洁一点,就是:你在看某个例子,碰到疑惑,正想了解这个疑惑的时候,下一行这个疑惑的解答就出来了,而且还非常详细与容易理解只是还没出版,等,出了之后一定备一本在身边[给自己的P.S:多看一下样张,重复看几次。虽然翻译的不怎么样,不过自己结合一下自己所理解的语法多看几次,总会有新的发现与概念上的突破]
AS/FLASH学习班报名
Author: 柳世杀神·GabrielGon23 十二 2007
AS培训班:课程基本内容:1、AS基础2、创造性解AS思路3、AS稍微拔高内容4、我自己的程序思想与一些程序写法的思路和解决办法 FLASH培训班:课程基本内容:1、FLASH动画制作思想2、视觉语言3、影视手法在FLASH中的运用4、让你的动画得到更好的控制-ActionScript在动画中的运用5、FLASH动画制作顺序6、FLASH动画制作技巧详情请加QQ:6000090,验证:AS教学
flahs as 无基础入门经典教程
Author: 柳世杀神·GabrielGon19 十二 2007
flex builder 2编译时下正常的flash9.ocx的问题解决
Author: 柳世杀神·GabrielGon29 九 2007
如何从数组中随机取出多个不重复的项
Author: 柳世杀神·GabrielGon5 七 2007
FLASH场景大小改变后内容按比例缩放的一个例子
Author: 柳世杀神·GabrielGon13 十二 2006
原来是在1024X610 大小里做的场景,现在新做了一个场景是800X600的。怎么样把原来1024X610里面做的东西…



最活跃用户