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();
        }
        }
    }

このシナリオでは「woody」がキャラクターです。さて、問題は、ゲームの最初の 3 つのレベルをカバーする最大 10 個の「ビニール」アイテムに対して完全に正常に機能していることです。これで第 4 レベルに進み、マップにさらに「vinyl」ムービークリップを追加しました (配列には常に 40 個の値がありましたが、for ループは個々のレベルごとに設定された「maxVinyl」までしか反復しません)。衝突検出が機能しない理由。

エラー メッセージは表示されず、最初の 10 個のムービークリップは正しく検出されますが、11 個以降は正しく検出されません。

どんな助けでも大歓迎です - そして、問題についてもっと情報が必要なら、尋ねてください!

乾杯

編集: 言い忘れましたが、最初のレベルで 10 枚以上のビニールをテストしたところ、検出が機能しました。状況は、すべてのビニール ムービークリップが、misc と呼ばれるムービークリップ内の各レベルの個別のキー フレームに格納されていることです。だから私は最初のレベルで10+を行うことができますが、それはそれのようです..

4

1 に答える 1

0

maxVinyl が配列の正しい長さに設定されていないことが原因だと思います。

シンプルな :

maxVinyl = vinylArray.length;

for ループの BEFORE は、その配列内のすべてのオブジェクトが必要に応じて hitTest であることを確認する必要があります。

いくつかのコメントに基づいて、あなたのアプローチには、より大きな問題である可能性のある他の問題がいくつかあるようです。

于 2012-12-27T17:20:28.617 に答える