AS3中hitTestObject函数异常:命中时goodmc与sadmc同时显示
问题排查方向
1. 函数重复调用触发二次分支
碰撞触发后你执行了removeChild(ball3),将ball3从显示列表移除。如果ball3test()在这次触发后再次被调用,此时ball3.hitTestObject(ball1_t)会返回false(ball3已不在舞台),代码会进入else分支把sadmc.alpha设为1,导致两个MC同时显示。
- 检查
ball3test()的调用时机:比如是否绑定了多次事件(如帧循环、重复点击事件),或者ssdone()函数内部又触发了ball3test()执行。
2. ssdone()函数存在异常逻辑
排查ssdone()内部代码,是否存在不管分支结果,都强制将sadmc.alpha设为1的逻辑——这会直接导致碰撞触发时两个MC同时显示。
3. 临时验证方案
在ball3test()开头加日志输出,或临时注释removeChild(ball3),验证问题根源:
function ball3test() { trace("ball3test执行,碰撞结果:" + ball3.hitTestObject(ball1_t)); // 查看执行次数与碰撞结果 if (ball3.hitTestObject(ball1_t)) { goodmc.alpha = 1; // removeChild(ball3); // 临时注释该行 sw = sw + 1; ball3t.alpha = 1; setTimeout(hidhap, 1000); ss = ss + 1; ssdone(); } else { sadmc.alpha = 1; ball3.x = ball3X; ball3.y = ball3Y; setTimeout(hidsad, 1000); ssdone(); } }
如果注释removeChild(ball3)后,碰撞触发时sadmc不再显示,即可确认是函数重复调用导致的问题。
内容的提问来源于stack exchange,提问作者Ayman Abozied
相关产品推荐
相关产品推荐

