-1

私はこれらの配列を持っています

   //Array elements are Sprites (Class) in Flash Library

    var elements:Array  = new Array (el1_spr, el2_spr, el3_spr);
    var container:Array = new Array();

    for var (i:uint; allElements.length; i++){
       container.push(allElements[i]);
       var v:Sprite = (allElements[i] as Sprite);

    addChild(container[i]);
    Puzzle.polozaj.(container[i]);

//Error is:
//TypeError: Error #1034: Type Coercion failed: cannot convert el1_spr$ to flash.display.DisplayObject.
    at project_fla::MainTimeline/frame1()




}
4

7 に答える 7

1

el1_sprClassオブジェクトではなくSprite

やったほうがいい:

var s:Sprite = new el1_spr() as Sprite;

Spriteあなたのオブジェクトを取得するために。

于 2009-07-06T14:08:41.220 に答える
0

おそらくv、ではなく、ディスプレイリストに追加できるようですcontainer[i]。あなたはそれを試しましたか?

更新:実際、問題はループ定義の2番目の項目に起因すると思います。i < allElements.lengthではなく、である必要がありallElements.lengthます。設定方法では、必要以上に1回実行されています。

以下は、上記の投稿内容に基づいた、いくつかの実用的なコードです。明確にする必要がある場合は、コメントで私を殴ってください(誰でも-これまでのところ、荒れた朝でした...)。

var el1_spr:Sprite = new Sprite;
var el2_spr:Sprite = new Sprite;
var el3_spr:Sprite = new Sprite;

el1_spr.graphics.beginFill(0x0000FF);
el1_spr.graphics.moveTo(0,0);
el1_spr.graphics.lineTo(100,0);
el1_spr.graphics.lineTo(100,100);
el1_spr.graphics.lineTo(0,100);
el1_spr.graphics.lineTo(0,0);
el1_spr.graphics.endFill();

el2_spr.graphics.beginFill(0x00FF00);
el2_spr.graphics.moveTo(0,0);
el2_spr.graphics.lineTo(100,0);
el2_spr.graphics.lineTo(100,100);
el2_spr.graphics.lineTo(0,100);
el2_spr.graphics.lineTo(0,0);
el2_spr.graphics.endFill();

el3_spr.graphics.beginFill(0xFF0000);
el3_spr.graphics.moveTo(0,0);
el3_spr.graphics.lineTo(100,0);
el3_spr.graphics.lineTo(100,100);
el3_spr.graphics.lineTo(0,100);
el3_spr.graphics.lineTo(0,0);
el3_spr.graphics.endFill();

var elements:Array  = new Array (el1_spr, el2_spr, el3_spr);
var container:Array = new Array();

for (var i:uint; i < elements.length; i++)
{
    container.push(elements[i]);
    var v:Sprite = (elements[i] as Sprite);

    addChild(v);
    //addChild(elements[i]);        // this also works
    //addChild(container[i]);       // this also works

    v.x += (100 * i);
    //elements[i].x += (100 * i);   // this also works
    //container[i].x += (100 * i);  // this also works
}

あなたのコードのコンテキストが何であるかはわかりませんが、それが価値があるかもしれないので、あなたが必ずしもcontainer配列を必要としないことを示すために、またはを作成するために、私はいくつかの余分な行を含めましたv

お役に立てば幸いです。

于 2009-07-06T13:18:53.363 に答える
0

助けてくれてありがとう。ここでコードとコンテキストをクリアしました。

要素配列の値はフラッシュライブラリのオブジェクトですel1_spr、el2_spr、el3_sprはシンボルプロパティのクラス名です。シンボルの基本クラスはflash.display.Sprite(Symbol Properties)です。このライブラリスプライトをステージに追加し、Puzzle.polozaj(Class、Method)で処理する必要があります。

var elements:Array = new Array (el1_spr, el2_spr, el3_spr);

for (var i:uint; i < elements.length; i++){

    addChild(elements[i]);
    Puzzle.polozaj(elements[i]);

}
//TypeError: Error #1034: Type Coercion failed: cannot convert a1_spr$ to flash.display.DisplayObject.
    at puzzle_fla::MainTimeline/frame1()
于 2009-07-06T15:37:25.943 に答える
0

スプライトは DisplayObject から継承します。

継承チェーンは次のようになります。

スプライト -> DisplayObjectContainer -> InteractiveObject -> DisplayObject

あなたのコードに関する私の質問はこれです:

すでに Sprite であるオブジェクトを Sprite にキャストするのはなぜですか?

于 2009-07-06T13:26:05.650 に答える
0

宣言することから始めelementsますが、後で を使用しますallElements。そんなはずじゃないの?

ローカル変数を設定しますが、キャストが不可能な場合に as null でvキャストすると、決して使用しません。operatorしたがって、ここでエラーが発生することはありません。

私にとって、これには要素allElementsが含まれていないように見えます。DisplayObject

また、行Puzzle.polozaj.(container[i]);は少し奇妙に見えます。多分あなたはポロザイの後にたくさんのドットを持っていますか?

于 2009-07-06T13:44:24.323 に答える
0

問題を解決しました。シンボルの新しいインスタンスを作成し、変数名を参照として配列に入れる必要がありました。

スレッドに解決済みのタグを付けるオプションはありますか?

ところで素晴らしいサイト!

于 2009-07-06T16:59:01.197 に答える