Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays AS3:阵列中一定数量的movieclips之后没有hittest检测_Arrays_Actionscript 3_Loops_For Loop - Fatal编程技术网

Arrays AS3:阵列中一定数量的movieclips之后没有hittest检测

Arrays AS3:阵列中一定数量的movieclips之后没有hittest检测,arrays,actionscript-3,loops,for-loop,Arrays,Actionscript 3,Loops,For Loop,我意识到描述有点模糊,如果不显示代码,我无法解释问题 基本上,我已经在AS3中制作了一个游戏,其中包含了一个角色在平台级收集物品。这些项目都是同一实例(乙烯基1A)的独立电影剪辑 对级别中每个项目的引用存储在一个数组中,如图所示: vinylArray=[mapbg.misc.vinyl1, mapbg.misc.vinyl2, mapbg.misc.vinyl3, mapbg.misc.vinyl4,...] 实际数组最多可包含40个项目。碰撞检测通过for循环完成,如下所示: var i:

我意识到描述有点模糊,如果不显示代码,我无法解释问题

基本上,我已经在AS3中制作了一个游戏,其中包含了一个角色在平台级收集物品。这些项目都是同一实例(乙烯基1A)的独立电影剪辑

对级别中每个项目的引用存储在一个数组中,如图所示:

vinylArray=[mapbg.misc.vinyl1, mapbg.misc.vinyl2, mapbg.misc.vinyl3, mapbg.misc.vinyl4,...]
实际数组最多可包含40个项目。碰撞检测通过for循环完成,如下所示:

var i:int;
for (i=0; i < maxVinyl; i++){ //iterate from 0 to maximum amount of vinyl
    if (woody.hitTestObject(vinylArray[i])) { //checks if woody collides with vinyl
        if (vinylArray[i].visible == true) { //checks if the vinyl has already been taken
        vinylArray[i].visible = false; //removes vinyl from map
        vinylCollected++; //adds to score
        updateScore();
        }
        }
    }
vari:int;
对于(i=0;i
在这个场景中,“伍迪”是角色。现在,问题是,我已经让它在多达10个“乙烯基”物品上工作得非常好,涵盖了游戏的前3个关卡。现在我已经进入了第四级,我在地图上添加了更多的“乙烯基”movieclips(数组一直有40个值,但for循环只迭代到“maxVinyl”,这是为每个级别设置的),出于某种原因,碰撞检测无法工作

没有错误消息,前10个movieclips仍然被正确检测到,但11个以后的movieclips没有被正确检测到

任何帮助都将不胜感激-如果您需要更多关于这个问题的信息,请询问

干杯


编辑:忘了提到,我在第一级测试了10多个乙烯基,检测工作正常-情况是,所有乙烯基电影剪辑都存储在每个级别的单独关键帧中,在一个名为misc的电影剪辑中。因此,我可以在第一个级别上执行10+,但似乎就是这样。

我可以想象发生的情况是,Max乙烯基没有设置为数组的正确长度

一个简单的例子:

maxVinyl = vinylArray.length;
在执行for循环之前,应确保该数组中的所有对象都是所需的命中测试


根据一些评论,听起来您的方法还存在其他一些问题,这可能是更大的问题

尝试在前两个级别中添加更多内容,看看你是否可以在事情似乎正常的地方获得10个以上的内容,这样你就可以缩小问题发生的范围。此外,一旦你找到了黑胶物品,将其从命中测试阵列中弹出,而不是每次都检查它们,这将更加有效。如果你有不同的级别,只需初始化乙烯基阵列,并进一步简化该级别的项目。哇-抱歉,完全忘记了我在第一个级别测试了一个额外的乙烯基,检测结果很好,这让我更加困惑!乙烯基电影唇都存储在电影唇的不同关键帧上,每个级别称为“misc”。在级别4中还有什么不同?好吧,多亏了你的评论,我实际上自己解决了这个问题!基本上,我必须把额外的乙烯基对象到每一个层面之前的一个问题,它的作品很好!为回应干杯,伙计!