1

私は以下のコードを使用しており、「trace(TheVar);」ヌルになります。誰もが理由を知っていますか?

var TheVar:MovieClip; 
var myArray:Array = ["TheContent", "TheContent2"];

function RandomM()
{
    trace(myArray.length);
    var r = Math.round(Math.random() * myArray.length);
    trace(myArray[r]);
    var TheVar:MovieClip =  myArray[r] as MovieClip;
    trace(TheVar);
}

RandomM();

アップデート:

私がやろうとしていることを示すために完全なコードを入れています

this.stage.scaleMode = StageScaleMode.NO_SCALE;
this.stage.align = StageAlign.TOP_LEFT;

var TheContent:Loader = new Loader();
var TheContent2:Loader = new Loader();

function Load1()
{
    TheContent.load(new URLRequest("1.png"));
    TheContent.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadContent);

    function LoadContent(e:Event)
    {
        addChild(TheContent);
        TheContent.width = ScreenX;
        TheContent.height = ScreenY;
        Load2()
    }
}

function Load2()
{
    TheContent2.load(new URLRequest("2.png"));
    TheContent2.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadContent);

    function LoadContent(e:Event)
    {
        trace("Jesus");
        addChild(TheContent2);
        TheContent2.width = ScreenX;
        TheContent2.height = ScreenY;
        RandomM();
    }
}


この関数RandomM()では、ローダー「TheVar」をこれらの配列の1つに変更します。ここには、ローダーもあります。最終的には、ユーザーのスワイプに応じてローダー間で変化するトゥイーンを作成したいと思います。

var TheVar:MovieClip; 
var myArray:Array = [TheContent, "TheContent2"];

function RandomM()
{
    trace(myArray.length);
    var r = Math.round(Math.random() * myArray.length);
    trace(myArray[r]);
    var Base:Class = getDefinitionByName(myArray[r]) as Class;
    var TheVar:MovieClip = new Base();
}

Load1();



Multitouch.inputMode = MultitouchInputMode.GESTURE;

stage.addEventListener(TransformGestureEvent.GESTURE_SWIPE, fl_SwipeHandler);

function fl_SwipeHandler(event:TransformGestureEvent):void
{
    switch(event.offsetX)
    {
        // swiped right
        case 1:
        {
            // Start your custom code
            // This example code moves the selected object 200 pixels to the right.
            TheVar.x += 200;
            // End your custom code

            break;
        }
        // swiped left
        case -1:
        {
            // Start your custom code
            // This example code moves the selected object 200 pixels to the left.
            TheVar.x -= 200;
            // End your custom code

            break;
        }
    }

    switch(event.offsetY)
    {
        // swiped down
        case 1:
        {
            // Start your custom code
            // This example code moves the selected object 200 pixels down.
            TheVar.y += 200;
            // End your custom code
            break;
        }
        // swiped up
        case -1:
        {
            // Start your custom code
            // This example code moves the selected object 200 pixels up.
            TheVar.y -= 200;
            // End your custom code
            break;
        }
    }
}

CLARIFYへの更新の追加:

TheContentという名前のローダーがあります。コードは次のとおりです。

var TheContent:Loader = new Loader();

画像とSWFコンテンツを含むいくつかの「ローダー」を作成したいと思います。次に、ONE TWEENを使用して画面外に移動したいのですが、トゥイーンを動的に使用して、そのTWEENでMovieClipを作成するVARに応じて異なるローダーを移動します。これを行うには、TWEEN...CHANGEABLEのムービーを作成する必要があります。これを行うための最善の方法は、ローダーのすべての名前を使用して配列を作成し、それらをランダムに呼び出して、TWEENのコンテンツを移動することだと思いました。したがって、私はARRAYを作成しました。

var myArray:Array = ["TheContent", "TheContent2"];

しかし、関数RandomM()からランダム変数を取得することはできません。後でTWEENで使用できます。そのローダーは「TheVar」と呼ばれます。

function RandomM()
{

trace(myArray.length);
var r = Math.round(Math.random() * (myArray.length -1) );


var theMC:String = myArray[r];
TheVar=this[theMC] as MovieClip;

trace(TheVar); //// TO BE USED LATER IN A TWEEN. 
///   IT WILL BE ONE TWEEN BUT WILL ANIMATE DIFFERENT MOVIES

}

それが理にかなっていることを願っています。

4

3 に答える 3

3

"TheContent""TheContent2"は文字列であり、MovieClipsではありません。

これらがステージ上のMovieClipsのインスタンス名である場合は、次のようなものを使用する必要があります。

var myArray:Array = [this["TheContent"], this["TheContent2"]);

またはもっと簡単に:

var myArray:Array = [TheContent, TheContent2];

タイムラインから作業していると仮定します。


TheContentTheContent2があなたが持っているクラスである場合、あなたはあなたが持っている文字列からそれらのクラスのインスタンスを作成するために使用することができますgetDefinitionByName()。例:

var Base:Class = getDefinitionByName("TheContent") as Class;
var TheVar:MovieClip = new Base();

addChild(TheVar);
于 2012-04-16T23:28:19.050 に答える
1

あなたの問題はこの行にあります

var r = Math.round(Math.random() * myArray.length);

ランダムはあなたに0から1までの数を与えます

myArray.length //will give (in your example) 2


ランダムが0.75.75* 2 = 1.5の値を与えるとしましょう
。丸め関数を使用すると、最も近い整数に丸められます。この場合は2(1.5以上は切り上げられます)
2がある場合は出力されます。あなたにnullを与えるはずのあなたの配列インデックスの。
あなたがする必要があるのは

var r = Math.round(Math.random() * (myArray.length -1) );

次に、正しい要素にアクセスして、ムービークリップの名前を取得する必要があります

var mcName:String = myArray[r]

次に、ムービークリップ自体にアクセスします

var THEVAR:MovieClip = this[mcName];
trace(THEVAR);
于 2012-04-17T01:45:53.497 に答える
1

あなたの編集に基づいて、うまくいけばあなたの問題をカバーする答えがここにあります。

最初に述べたように、配列にはローダー自体ではなく文字列が含まれています。あなたはこれをしたい:

var myArray:Array = [ TheContent, TheContent2 ];

"それぞれをラップしていないことに注意してください。

ランダムローダーを選択して割り当てるにはTheVar、次のようにします。

var TheVar:Loader = Loader( myArray[int(Math.random() * myArray.length)] );

これで、期待どおりに作業できますTheVar

于 2012-04-17T05:33:40.233 に答える