http://bbs.9ria.com/viewthread.php?tid=86648&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000
本帖最后由 flashk 于 2011-6-28 19:12 编辑
import flash.display.Sprite;
import flash.events.MouseEvent;
var s2:Sprite = new Sprite();
s2.graphics.beginFill(0xFF3300,0.5);
s2.graphics.drawRect(0,0,100,50);
this.addChild(s2);
this.mouseChildren = false;
this.addEventListener(MouseEvent.CLICK,traceOK);
function traceOK(e:MouseEvent)
{
trace("click");
}
把上面的这段代码放到一个文档类里测试。
然后你把这个代码放到另外一个自定义Sprite子类里,文档类里代码删掉,直接new这个子类,addChild。
测试下看。会让你大吃一惊。
简单的说就是文档类一旦设定mouseChildren是不会输出click的,子Sprite这样设定倒会输出。有人知道原因?
bug?Flash Player故意这样处理的?
其实也就是说文档的mouseChildren这个属性和其他Sprite处理是不一样的。虽然文档类也从Sprite继承。
再测了一下:
其实文档类完全就是不同的处理
mouseEnabled mouseChildren 两个属性都是不同的处理
比如一个Shape放到文档类得子Sprite里,这时候点击是会有输出的,但如果放到文档类里,是没有输出和点击的。
同样,MOUSE_UP,mouseMove,mouseOver,mouseDown都会受此属性的影响,但不会影响Stage的鼠标事件。
总结起来就是,
3个InteractiveObject的子类(文档类是Sprite的子类,Stage不是)他们各自mouseEnabled和mouseChildren的特点:
Stage:不管你flashplayer里放不放内容,就算你整个都是空的,也不管你别的对象mouseChildren如何设置。stage都会接收MouseEvent.CLICK,mouseMove,mouseDown等事件。stage.mouseChildren不影响文档类和其子对象。就是尽管文档类是stage的子对象,但不受此属性影响(这个好像我搞错了,重测试了下,和文档类效果一样)。this.stage.getChildAt(0) = [object MainTimeline] = 文档类的this
文档类:如果文档类下面只有个Shape,不管mouseEnabled设为何值,都不会接收鼠标事件。就是文档类下的Shape是不会产生鼠标事件的。mouseChildren = false会禁止所有的除stage外的鼠标事件(包括文档类自己)
Sprite:如果Sprite下面有个Shape,这个Shape在mouseEnabled=true是会产生鼠标事件的,mouseEnabled=false不产生。mouseChildren = false只禁止子交互对象的鼠标事件。如果Sprite本身包含Shape并且mouseEnabled=true自己会产生鼠标事件。就算没有子Shape,尽管将mouseChildren=false,只要有子显示对象(Sprite等),和mouseEnabled=true就会本身产生鼠标事件,尽管它的子对象不产生鼠标事件。
mouseChildren 是管子对象是否接收鼠标事件
mouseEnabled 是管自己是否接收鼠标事件
通过楼主的例子得出 文档类的 mouseChildren 设置为 false 时, 相当于 mouseEnabled也自动变成false的效果了。 而不是文档类则没有这种情况。 我也不理解ADOBE为什么要这么做
分享到:
相关推荐
使用`Stage`的`addChild()`方法将弹出框添加到舞台上,并通过`mouseChildren`和`mouseEnabled`属性控制交互性。 5. **XML布局与样式**: XML不仅可以存储菜单结构,还可以包含样式信息。通过解析XML中的CSS样式,...
- `Sprite` 类是 Flash 中的基本显示对象,可以包含图形、动画和事件处理程序。 - `Array` 类用于存储一系列有序的元素,这里用来管理数字和位置信息。 - `MouseEvent` 类代表鼠标事件,如 ` MouseEvent.CLICK ` ...
var customMenuItem:Sprite = new Sprite(); customMenuItem.graphics.beginFill(0x000000); // 背景色 customMenuItem.graphics.drawRect(0, 0, 100, 20); // 尺寸 customMenuItem.graphics.endFill(); ...
- 设置 `mouseEnabled` 和 `mouseChildren` 属性为 `false`,可以降低鼠标事件处理的开销。 ### 5. 定时器与动画优化 - 尽量减少对 `ENTER_FRAME` 事件的监听,合理使用 `Timer` 类,避免过度更新导致的性能瓶颈。...
**3、当不需要鼠标事件的时候将mouseEnabled和mouseChildren设为false** - **鼠标事件**: 关闭不需要的鼠标事件监听器可以降低CPU负载。 **4、对执行时间太长的非动画内容,优先选择计时器,而非Event.ENTER_FRAME...
为了让鼠标在线条上时显示为手型,我们需要在`myLine`组件上设置`mouseChildren`和`cursor`属性: ```actionscript myLine.mouseChildren = false; // 防止子元素接收鼠标事件 myLine.cursor = "hand"; ``` 4....
在AS3中,我们通常使用`TextField`类来创建和操作文本。`TextField`对象可以显示单行或多行文本,并支持基本的格式化和交互性。 2. **文本链接与热区**: 在网页设计中,超链接可以通过HTML的`<a>`标签实现,而在...
4. **获取屏幕分辨率**:使用`flash.system.Capabilities`类的`screenResolutionX`和`screenResolutionY`属性可获取用户的屏幕宽度和高度。 5. **Label和LinkButton的文本换行**:在ActionScript中,使用`\r\n`来...
`stage.mouseChildren = false`确保鼠标事件只作用于舞台,不作用于舞台上的任何其他对象。 `onMouseMove`函数将处理鼠标移动事件,更新心形的位置: ```actionscript function onMouseMove(event:MouseEvent):...
这可以通过设置窗体的`mouseChildren`属性为`false`,然后在窗体上添加一个覆盖整个区域的透明薄膜,监听薄膜上的鼠标事件来实现。 在Flex开发中,理解并掌握这些基本的窗体交互技巧是至关重要的,它们能帮助我们...
用户可以通过`Graphics`类的方法如`beginFill()`和`lineTo()`来创建线条和形状。例如,你可以先调用`beginPath()`开始一个新的路径,然后通过`moveTo(x, y)`设置起点,接着多次调用`lineTo(x, y)`添加线条,最后用`...
- **合理使用事件监听器**:关闭不必要的鼠标事件监听器,如`mouseEnabled`和`mouseChildren`,可以降低系统负担,提高游戏运行的流畅度。 #### 五、综合应用案例 根据文章提供的数据,使用`copyPixels`进行1000次...