请告诉我是否需要更多信息才能解决此问题
我有一个列出对象后跟其位置的数组,并且我遍历它以找到程序要去的帧。
因此循环遍历列表的循环绑定了角色对象,因此当角色碰到列表中的对象时,角色会更改帧。
我删除了一些东西,所以这不是代码转储
function moveDude(e:Event){
var obj:Object = e.target;
for (i = 0; i<cols.length; i+=2)
{
if (cols[i] != null)
{
if (obj.hitTestObject(cols[i]))
{
gotoAndStop(cols[i+1]);
break;
}
}
}
在函数
之外定义的对象数组var cols = new Array(world.t1,6,world.lv1,"donkeyKong",background1.hit,3,world.door,1);
http://prntscr.com/5mqdpm 框架中定义的函数,该函数在其他框架上展开,然后在角色使用或不使用时从角色对象中添加或删除。
第一帧的例子:
if (character!=null)
{ character.addEventListener(Event.ENTER_FRAME, moveDude);
}
这一切都运行正常,但是当角色从一帧移动到另一帧时,带有将其返回到第1帧的对象的hitTest不起作用?看到数组中的最后一个对象/帧,它没有在下面提到的for循环中被检测到
答案 0 :(得分:1)
当您从一个帧移动到下一个帧时,前一帧上的所有内容都将被删除,因此除非您回到帧时重新生成cols数组,否则您将尝试测试与对象的碰撞再也不存在了。
答案 1 :(得分:0)
然而,这可能不是您的问题;
for (i = 0; i<cols.length; i+=2)
你在这里没有声明i
,那么当循环超出范围时会发生什么? i
会被销毁吗?我不知道。我自己并不完全了解垃圾收集。你在哪里宣布i
?因为如果它在循环之外,那么您可能无法重置其值。如果你根本没有宣布它,也许它没有及时收集垃圾并保持它的价值
for (var i:uint = 0; i<cols.length; i+=2)
如果您只希望它在for
循环中具有范围,那么应该如何声明变量。当循环重新启动时,它将重新初始化为0。