我意识到描述有点模糊,如果不给出代码我就不能解释这个问题!
基本上,我已经用AS3做了一个游戏,其中包含了一个角色,在平台上移动,风格级别,收集物品。这些项目都是同一实例(vinyl1a)的独立电影剪辑。
对级别中每个项目的引用存储在一个数组中,如下所示:
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();
}
}
}在这个场景中,“伍迪”就是角色。现在,问题是,我已经让它在10个‘黑胶’物品上工作得很好,涵盖了游戏的前3个关卡。现在我已经进入了第四级,我已经在地图中添加了更多的‘黑胶’电影剪辑(数组一直有40个值,但for循环只迭代到'maxVinyl‘,这是为每个单独的级别设置的),由于某种原因,碰撞检测就是不起作用。
没有错误消息,前10个电影片段仍然被正确检测,但11个以上的电影片段没有被正确检测到。
任何帮助都将不胜感激--如果你需要更多关于这个问题的信息,请联系我们!
干杯
编辑:忘了提一下,我在第一层测试了10多个黑胶,检测工作正常--情况是所有的黑胶电影剪辑都存储在每个级别的单独关键帧中,在一个名为misc的电影剪辑中。所以我可以在第一层做10+,但似乎就是这样..
发布于 2012-12-28 01:20:29
我可以想象发生的情况是maxVinyl没有设置为正确的数组长度。
一个简单的例子:
maxVinyl = vinylArray.length;在此之前,for循环应该确保该数组中的所有对象都是所需的hitTest。
根据一些评论,听起来你的方法中还有一些其他问题,可能是更大的问题。
https://stackoverflow.com/questions/14056017
复制相似问题