こんにちは、私はゲームを開発しています。配列によってステージに追加される 5 つのムービー クリップを追跡する配列があります。私は Player ムービー クリップも持っているので、Player ムービー クリップは、次のようにステージに追加された 5 つのダイヤモンド ムービー クリップすべてでヒット テストを行っています。
private var nPoints:Number = 5;..........
public function addPointsToStage():void
{
for (var i = 0; i < nPoints; i++)
{
trace(aPointsArray.length);
points = new mcGainPoints();
stage.addChild(points);
points.x = startPoint.x + (xSpacing * i);
points.y = startPoint.y - (ySpacing * i);
aPointsArray.push(points);
}
}
プレーヤが 5 つのムービー クリップすべてに接触すると、すべて正常に動作し、配列の出力は次のようになります。
0 1 2 3 4
その後、次のレベルに進みます。
しかし、私の Player が 5 つのムービー クリップのいずれにもヒットしないか、2、3 しかヒットしないとします。次のレベルが開始されると、出力は次のようになります: 5 6 7 8 9
次のレベルが開始されると、ポイントがハイスコアに自動的に追加されるなど、奇妙なことが起こり始めます。
問題は、5 つのムービー クリップを正しく保持している配列を破棄していないことだと思います。これは、次のレベルを開始して配列を破棄するために使用するコードです。
if(player.hitTestObject(mcGoal_1))
{
//Remove all points from array/stage
for (var i:int = 0; i < aPointsArray.length; i++)
{
if (aPointsArray[i].parent)
{
parent.removeChild(aPointsArray[i]);
}
startNextLevel();
}
mcGoal_1 はゲームのオブジェクトであるため、プレイヤーが goal_1 をヒットすると、画面上のすべての配列オブジェクトが破壊され、次のレベルが開始されます。これは startnextlevel 関数です。
private function startNextLevel():void
{
//add points to next stage
addPointsToStage();
}
次のレベルが開始されたときに、配列が 01234 にリセットされない理由がわかりますか? それが、ゲームにランダムにポイントを追加するバグがある理由だと思います。どんな助けでも大歓迎です