我有碰撞代码,可以检测到我是否撞到了许多墙壁,但是当我移动到另一个框架时,即使我的墙壁被移除,它就像碰撞仍在那里。
我想如果我在进入下一帧时以某种方式停止代码,它可以提供帮助。
我也是新人。
这是我的代码。
function myHitTest(obj:DisplayObject, arr:Array):Boolean {
for (var i:int = 0; i < arr.length; ++i) {
//for (var item:DisplayObject in arr) {
var item:DisplayObject = arr[i]
if (obj.hitTestObject(item)) {
return true;
}
}
return false;
}
var everywall:Array = [w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12,w13,w14,w15,w16];
答案 0 :(得分:2)
你可以作弊,只需要everywall = [];
。这将不再检查与16个墙壁中的任何一个的碰撞。
Buuut没有解决主要问题。在这种情况下,重要的是某些东西仍在调用myHitTest
。无论什么循环调用需要退出,或者调用什么回调都需要重构。如果您需要的不仅仅是这些提示,请提供更多代码。
答案 1 :(得分:1)
另一个选项也不是我确定但应该工作的最好的方法是在检查你所在的框架之前添加一个if语句。如下所示:
function myHitTest(obj:DisplayObject, arr:Array):Boolean {
// Check to see if the frame is the one I want the code to run on (1)
if(currentFrame == 1) {
for (var i:int = 0; i < arr.length; ++i) {
//for (var item:DisplayObject in arr) {
var item:DisplayObject = arr[i]
if (obj.hitTestObject(item)) {
return true;
}
}
}
return false;
}
currentFrame
是一个关键字,如果您要查找root的currentFrame,则可以使用该关键字。如果您想要特定MovieClip
,可以使用MovieClip.currentFrame
。将== 1更改为==您想要运行的任何帧。