1

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

基本上,我在 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 个关卡。现在我已经进入第 4 级,我在地图中添加了更多的“乙烯基”电影剪辑(数组始终有 40 个值,但 for 循环仅迭代到为每个单独级别设置的“maxVinyl”)和一些原因是碰撞检测不起作用。

没有错误消息,前 10 个影片剪辑仍然可以正确检测到,但 11 之后的则不是。

任何帮助将不胜感激 - 如果您需要有关该问题的更多信息,请询问!

干杯

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

4

1 回答 1

0

我想正在发生的事情是 maxVinyl 没有设置为数组的正确长度。

一个简单的 :

maxVinyl = vinylArray.length;

在 for 循环之前,应确保该数组中的所有对象都按需要被 hitTest。

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

于 2012-12-27T17:20:28.617 回答