尝试测试与数组中的对象的冲突

时间:2014-12-30 20:22:01

标签: arrays actionscript-3 flash

请告诉我是否需要更多信息才能解决此问题

我有一个列出对象后跟其位置的数组,并且我遍历它以找到程序要去的帧。

因此循环遍历列表的循环绑定了角色对象,因此当角色碰到列表中的对象时,角色会更改帧。

我删除了一些东西,所以这不是代码转储

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循环中被检测到

2 个答案:

答案 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。