Actionscript 3 模拟鼠标事件AS3
我有一个项目,涉及在每次更新时轮询硬件交换机,并将其状态转换为自定义事件:Actionscript 3 模拟鼠标事件AS3,actionscript-3,events,Actionscript 3,Events,我有一个项目,涉及在每次更新时轮询硬件交换机,并将其状态转换为自定义事件: ToggleSwitchEvent.BackWardButtonDown ToggleSwitchEvent.BackWardButtonUp ToggleSwitchEvent.Click etc .... 硬件开关的作用类似于两个按钮的鼠标。因此,我希望能够将定制的ToggleSwitchEvent事件“注入”到显示列表中,并让它像MouseeEvent一样工作,从单击所相交的InteractionObject冒泡
ToggleSwitchEvent.BackWardButtonDown
ToggleSwitchEvent.BackWardButtonUp
ToggleSwitchEvent.Click
etc ....
硬件开关的作用类似于两个按钮的鼠标。因此,我希望能够将定制的ToggleSwitchEvent事件“注入”到显示列表中,并让它像MouseeEvent一样工作,从单击所相交的InteractionObject冒泡出来。这将允许我将ventListener添加到显示列表中,就像我使用MouseEvents一样
据我所知,问题在于我需要一个对DisplayList的叶节点的引用来手动插入我的ToggleSwitchEvent。我想说的是,在屏幕上的某个位置单击了开关,并让DisplayList计算出单击与什么InteractionObject相交,并发送我的ToggleSwitchEvent而不是MouseeEvent
是否有一种方法可以模拟AS3中的MouseEvent,但使用自定义事件 我不太明白。。。您希望自定义事件冒泡,还是自己触发
MouseEvent
s
bubbles
属性设置为true,则任何事件都将按预期冒泡stageX
和stageY
也会被适当地计算出来编辑: 好的,那么显示列表将不会真正为您处理这些。。。事实上,你有两个选择。。。从舞台开始,一直保持在鼠标下,通过舞台。。。或者,从鼠标下的对象开始,获取其在树中的路径,然后在其父链中找到右侧的
InteractiveObject
。。。后者可以使用DisplayObjectContainer::getObjectsUnderPoint
。。。这是密码
public static function dispatchEventUnderMouse(event:Event, stage:Stage, point:Point):Boolean {
//return if stage is disabled
if (!stage.mouseEnabled) return false;
//find the topmost object
var cur:DisplayObject = stage.getObjectsUnderPoint(point).pop();
if (cur == null) cur = stage;
//build the path
var path:Array = [];
while (cur != null) {
path.push(cur);
cur = cur.parent;
}
//traverse the path from the root to find the right InteractiveObject
while (path.length > 0) {
cur = path.pop();
if (cur is InteractiveObject) {
if (!(cur as InteractiveObject).mouseEnabled) {
cur = cur.parent;
break;
}
if (cur is DisplayObjectContainer) {
if (!(cur as DisplayObjectContainer).mouseChildren) break;
}
}
else {
cur = cur.parent;
break;
}
}
return cur.dispatchEvent(event);
}
你可能真的想在事件中注入正确的坐标,但我想你会发现…;)
冒泡不是问题,更重要的是,我不想弄清楚ToggleButtonEvent应该从哪个InteractionObject发出。我想如果DisplayList可以为meThanks back2Dos做到这一点,这就是我认为我必须要做的。谢谢你的详细回复。