0

コードのこのセクションでは、ゲームのレベルがロック解除されているかどうかを確認しています。配列の「レベル」には12個のムービークリップが含まれ、「levelsUnlocked」はユーザーが到達した最高レベルです。したがって、このコードでは、レベル位置がlevelsUnlocked値よりも高いかどうかを確認し、そうである場合はフレーム2(ロックされた画像)に移動し、低い場合はフレーム1に保持します。

私の質問は:

elseステートメントで、levels [levels.length --i]を参照する場合、ムービークリップとしては扱われませんが、levels[1]またはlevels[3]として参照する場合は、ムービークリップとして扱われます。なぜこれが起こっているのか誰かに教えてもらえますか?

function unlockLevels():void
        {
            for (var i:int = 0; i < levels.length; i++)
            {
                if (levels.length - i > levelsUnlocked)
                {
                    levels[levels.length - i].gotoAndStop(2);
                }
                else
                {
                    levels[levels.length - i].gotoAndStop(1);
                }
            }
        }
4

2 に答える 2

4

配列の長さは、次のような配列の長さを示します。

var a:Array = [0,1,2,3,4]
var length:int = a.length
trace(a)
//=> 5

ループの最初の反復では、intはゼロです。

a[a.length - 0]
// a[5] == undefinded
于 2012-08-25T16:43:28.673 に答える
1

使用できますMovieClip(levels[levels.length-i]).gotoAndStop(2);

編集:
質問への回答:
ループ中に配列の最後から配列要素にアクセスしようとしています。
someArray [someArray.length-i]は、配列の「last--i」要素を提供します。

于 2012-08-25T16:27:02.310 に答える