![]() |
1
0
您正在尝试在构造函数中创建鼠标离开的事件侦听器。如果没有通过addchild()方法将mainnav添加到阶段,则阶段对象可能还不存在。如果主导航系统在设计时已经在舞台上,那么舞台仍有可能无法立即使用。对于从DisplayObject继承的类(movieclip、sprite等),我在构造函数中只做一件事:设置一个event.added-to-stage-listener。当对象已通过父容器的addChild()添加到阶段的显示堆栈中,或者如果对象在设计时已经在阶段中,则该侦听器将触发init()方法。当调用init()方法时,我知道stage属性是可用的。 在构造函数中,阶段可能还不存在于实例中,但您应该得到一个运行时错误。但是,您在舞台前使用了“this”关键字。当您在继承自对象的类中使用“this”(您的类通过movieclip->displayobject->eventspatcher->对象)时,如果该属性不存在,则编译器不会抛出错误,因为它试图将该属性创建为“this”的成员。这是因为对象类是动态的,这意味着可以在任何时候创建新的属性,而不必将它们声明为头中的类变量——使用该动态属性时,只需使用“this”关键字即可。使用this.stage时,如果stage不存在,则类将为您创建属性stage。但是,这不是您想要的阶段,因此侦听器只是连接到一个空对象,而该对象不做任何事情。在引用阶段时尝试删除“this”,我确信在某个时刻您会看到错误。通常,将“this”用于属性是不好的做法,因为编译器将忽略该属性的类型错误。 你在上面的一条评论中提到鼠标离开在IDE中不起作用,但是我在CS4中测试了它,它确实起作用。与浏览器的flash player插件相比,您可能看到了与IDE的flash player的性能差异。在某些情况下,如果SWF加载很快并且阶段立即可用,则阶段事件侦听器将从构造函数工作,但它不可靠。将该侦听器移动到init()方法,该方法在添加的\u to \u stage事件之后调用,并且不要使用'this'关键字。 |
![]() |
2
1
回答:event.mouse离开不会在IDE中触发。当电影嵌入到HTML页面中时,它可以正常工作。谢谢你的帮助! |