AS3鼠标事件和武器参考



好吧,这里有一件奇怪的事情:

我有一个班,是一个有两个孩子的MovieClip,MovieClips也是
我把孩子们加在他身上,把MovieClip放在舞台上。其中一个孩子很兴奋
一切都很完美
现在,当我在孩子们身上添加MouseEvent.MOUSE_UP时,一切都很好
然而,如果我将useWeakReference设置为true(第五个参数),鼠标事件将不再触发,但项目已在舞台上。基本上,不知何故,它们不在记忆中


当然,如果我添加一个简单的onEnterFrame,它对MovieClip没有任何作用,它会跟踪MovieClips,但MouseEvents不会触发。这意味着物体仍然在那里,但不知何故,对于闪光来说,它不是

现在,这是一个简化的概念,很容易清理,但我的代码很大,简单的removeEventListener不是一个解决方案。至少不是一个简单的问题
您对此有何建议

我不确定你的代码有多复杂,但如果每个movieclip都有MOUSE_UP事件处理程序——一些函数,你确实可以使用removeEventListener MOUSE_UP函数。例如:

var mc:MovieClip = new MovieClip();
mc.addEventListener( MouseEvent.MOUSE_UP, onMU );
function onMU(e:MouseEvent){
   var target = MovieClip(e.currentTarget);
   target.removeEventListener( MouseEvent.MOUSE_UP, onMU );
}

通过这种方式,您可以拥有多个movieclip并在不知道对象名称的情况下删除侦听器。

或者,您可以修改代码以添加所有添加的事件中的一个,然后监听REMOVE_FROM_STAGE事件。类似这样的东西:

var mc:MovieClip = new MovieClip();
mc.events = [];
mc.events.push( { evt: MouseEvent.MOUSE_UP, fn: onMU } );
mc.addEventListener( MouseEvent.MOUSE_UP, onMU } )
//or use events array reference to keep events and functions in one place. 
//when object is removed you can iterate through events array and automatically remove 
//all listeners

另一种选择是创建扩展MovieClip的Class,但由于您的代码很大,您可能不想这样做。

您还可以查看Robert Penner的Signals库,它是AS3事件的有趣替代品。(https://github.com/robertpenner/as3-signals)

相关内容

  • 没有找到相关文章

最新更新