エラー1010アクションスクリプト3

このwhileループを使用するとエラー#1010が発生します。

while (pos.length>0)
{
    coo = pos.splice(Math.floor(Math.random() * pos.length),1)[0];

    (pos_array[index]).x = coo.x;
    (pos_array[index]).y = coo.y;
    index++;
}

The error says: A term is undefined and has no properties.

私は他のプログラムに同じループを使用したので、私のループで何が間違っています、私はそのようなエラーはありません。

ご清聴ありがとうございました。

1
私はas3ファイルで同じコードを使用していたので、コード内で何を変更するかは分かりませんでした。今度はクラスを使ってクラスを使っています。なぜ今働いていないのか分からない
追加された 著者 CMS,
すべて順調。デバッガを使用して、それがどの行かを確認しました。エラーがループ内にあります。しかし、どこを知らない
追加された 著者 CMS,
それらはすべて定義されています:var coo:Object:var pos_array:Array = new Array(); var index:uint = 0;
追加された 著者 CMS,
このコードからはわかりません。 'pos'、 'pos_array'、 'pos_array'の要素、 'pos'と 'index'の要素はすべて未定義です。
追加された 著者 RIAstar,
'x'プロパティを設定すると、 'pos_array'の要素は既に存在しますか?例えば'(pos_array [0]).x = coo.x'を実行すると、配列のその位置に属性xを持つクラスのインスタンスがありますか?
追加された 著者 RIAstar,
'pos'と 'pos_array'の要素はどうですか?どのラインでエラーがスローされますか?あなたは自由にデバッガを持っていませんか?
追加された 著者 RIAstar,
パッケージ対FLAは問題ではありません。ここに来る: pos_array [index] pos_array には値が含まれていないようです。
追加された 著者 gthmb,

3 答え

コレクションに含まれるものがわからなければ、DisplayObjectsまたはxプロパティとyプロパティを持つオブジェクトでいっぱいになっていると仮定していますか?

コンパイラがコレクションの内容を理解できるように、参照をキャストします。例えば:

DisplayObject(pos_array[index]).x = coo.x;
DisplayObject(pos_array[index]).y = coo.y;

...またはあなたのコレクションに含まれているすべてのタイプ。

0
追加された
はい配列にはムービークリップが含まれていますが、これは解決策ではありません。なぜなら、私は新しいエラー "未定義のメソッド"
追加された 著者 CMS,
私はループの条件を変更する場合: "while(pos.length == 0)"それは動作します
追加された 著者 CMS,

あなたのwhileループは壊れています。

pos.lengthは決して変更されず、最終的に pos_array [index] は範囲外になります。

あなたが限界を超えているときは、それは未定義です。 だから基本的にはやっている。

undefined.x = coo.x;

そして、エラーと同様に、undefinedにはプロパティがありません。

私はこのループが今までどのように働いているのか分かりません。

代わりに多くのクリーナーを試してみてください

var savedX:Number = 0
for each( var obj:Object in pos_array ){
  coo = new MovieClip()
  coo = pos.splice(Math.floor(Math.random() * pos.length),1)[0];
  obj.x = savedX;
  obj.y = 0;
  savedX += coo.width;
}
0
追加された
今朝シャワーを浴びていて、あなたの問題は私の頭の中に浮かんでいた。とにかく、あなたはその問題を解決するために私の答えを更新しました。
追加された 著者 The_asMan,
あなたのために私の答えを編集しました。質問をして答えを得るためのフォーラムの形式にしてください。あなたが正しい答えを得たときにそれを受け入れて、あなたに質問があれば新しい質問を投稿してください。
追加された 著者 The_asMan,
私はコードがあなたがそれがすることを期待していることを行うことを確認していません。私はposの値を検証し、それらがすべて良い場所であることを確認することから始めます。
追加された 著者 The_asMan,
あなたのロジックに欠陥があります。配列を使用して位置を保存していますが、ランダムにアクセスすることで1つの位置を複数回使用する可能性があります。その位置を "使用"すると、pos配列から要素を削除する必要があります。
追加された 著者 The_asMan,
私はそれを試してみましたが、エラーはありませんでしたが、mcは以前のように並んでいません。彼らは今スタックされています。どうすればそれらを整理できますか?私はすでに配列posに位置を格納しています
追加された 著者 CMS,
:) ご協力ありがとうございました
追加された 著者 CMS,
これはそれらを並べて配置するように働いたが、mcは互いに混ざらない。私はあなたが私を助けるためにあなたの時間を取ったことをありがとう
追加された 著者 CMS,
あなたは私にこれを行う方法を教えてもらえますか?いくつかのmcを配列に格納しています。これらのmcをステージ上に並べて配置したいと思います。どうやってやるの?ありがとうございました
追加された 著者 CMS,
私はcooを削除するのを忘れました= ...
追加された 著者 CMS,
私は次のようにします:各(var obj:pos_arrayのオブジェクト){coo = pos.splice(Math.random()* pos.length)、1)[0]; obj.x + = loader.width/4; obj.y = 0; if(x> loader.width){x = 0; y = loader.height/2; }}
追加された 著者 CMS,

おそらく pos.length pos_array.length は、ループの開始時には等しくありません。

これを試して:

while (pos.length>0)
{

    coo = pos.splice(Math.floor(Math.random() * pos.length),1)[0];
    if (pos_array[index])
    {
        (pos_array[index]).x = coo.x;
        (pos_array[index]).y = coo.y;
    }
    index++;

}
0
追加された