0

このクラスにドキュメント クラスがあります。ムービー クリップを動的に作成し、それらを配列に格納して、最後に addChild を使用してステージに追加します。問題は、配列を介して movieClips を削除しようとしているにもかかわらず、エラーがスローされていることです。

1034: 型強制に失敗しました: []@26be1fb1 を flash.display.DisplayObject に変換できません。

これが私のコードです:

    // Note i have declared the array outside the function, so that's not an issue
    function x (e:MouseEvent){
    
        
        if (thumbnails.length !== 0){ // Determine if any movieclips have already been created on stage and delete them
            for(var ctr:int = 0; ctr < thumbnails.length;ctr++ ){
                removeChild(thumbnails[ctr]);
                
            }
            
        }
        for (var i: int = 0;i < userIput; i++){ // Loop through and create instances of symbol
            
            
            var thumb:Thumbnail = new Thumbnail();
            
            thumb.y = 180; // Set y position
            thumb.x = 30 + ((thumb.width + 10) * i); 
            
            
            addChild(thumb);

            thumbnails[i] = [thumb]; // Add to array
        }
    }
4

3 に答える 3

1

MovieClipからを取得する場合は、削除する前Arrayに としてキャストする必要があります。DisplayObject

    if (thumbnails.length !== 0){ // Determine if any movieclips have already been created on stage and delete them
        for(var ctr:int = 0; ctr < thumbnails.length;ctr++ ){
            removeChild(DisplayObject(thumbnails[ctr]));

        }

    }

または、ベースタイプを次のように設定してVector(タイプセーフバージョンの) を使用することを検討できます。ArrayDisplayObject

var thumbnails:Vector.<DisplayObject> = new Vector.<DisplayObject>();
thumbnails.push(new MovieClip());

this.addChild(thumbnails[0]);
this.removeChild(thumbnails[0]);

詳細については、型変換に関する Adob​​e ドキュメントを参照してくださいVectors

アップデート:

のインスタンスを に追加する代わりにThumbnailArray次の行は実際にはArray、単一の要素を含むさらに をサムネイルに追加しています (実際にArrayは、多次元の を作成していますArray)。

// You're assigning an array literal with a single element 
// to this element of the the thumbnails array
thumbnails[i] = [thumb]; 

代わりに、次のいずれかを試してください。

 // What you meant
 thumbnails[i] = thumb; 

 // Better
 thumbnails.push(thumb);
于 2012-08-20T09:04:09.370 に答える
1

[]@26be1fb1表示されるエラーは、Flash Player がDisplayObjectに変換できないことを示しています。[]@26be1fb1は、アドレスを変換できないオブジェクトのタイプのヒントを提供します。[]はここでのオブジェクトのタイプであり、タイプを意味するArrayため、removeChild()が呼び出されたときに配列を渡そうとしますが、メソッドは DisplayObject を想定しています。

なぜこれが起こるのか

あなたのコードには、非常に単純ですが目立たない問題があります。つまり、次のコード行にあります。

thumbnails[i] = [thumb]; // Add to array

[]aroundを使用して、親指を配列に入れますthumb。したがって、コードが実際に行っていることは、単一の要素 ( thumb) を持つ配列を配列に追加することthumbnailsです。その後、単一の要素を持つ配列の配列があります。

解決

上記の行を次のように変更します。

thumbnails[i] = thumb; // Add to array

これで問題が解決するはずです。

于 2012-09-01T10:18:39.403 に答える
0

認識された問題について:

配列の代わりにベクトルを使用する か、配列項目を Thumbnail クラスにキャストします


しかし、主な原因はおそらく、配列からアイテムを決してクリアしないという事実です。親/ステージからそれらを削除しますが、配列からは削除しません...配列内の特定の場所にアイテムを追加することと一緒に不安定な動作を引き起こす:

それらを追加します:
t[0] = item0_0
t[1] = item0_1
t[2] = item0_2
t[3] = item0_3

次にitem0_0、item0_1、item0_2、item0_3をステージから削除しますが、
次に2つの新しいものを追加する配列に残します

t[0] = item1_0
t[1] = item1_1


ステージ上: item1_0
item1_1
in

array:
t[0] = item1_0
t[1] = item1_1
t[2] = item0_2
t[3] = item0_3



これは機能するはずです:

var thumbnails:Vector.<Thumbnail> = new Vector.<Thumbnail>();

function x (e:MouseEvent) {

    var thumb:Thumbnail;

    for each(thumb in thumbnails){
        removeChild(thumb);
    }

    thumbnails = new Vector.<Thumbnail>(); // clear Vector by re-initiating it

    for (var i: int = 0;i < userIput; i++){ 
        thumb = new Thumbnail();

        // ...

        addChild(thumb);

        thumbnails.push(thumb);
    }
}
于 2012-08-20T21:58:00.567 に答える