1

我正在使用下面的代码,当我“跟踪(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”更改为这些数组之一,其中也是加载器。我想最终创建一个补间,它将根据用户的滑动在加载器之间发生变化。

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;
        }
    }
}

添加更新以澄清:

我有一个名为 TheContent 的 LOADER:这是代码:

var TheContent:Loader = new Loader();

我想创建几个具有图像和 SWF 内容的“加载器”。然后我想使用 ONE TWEEN 将它们移出屏幕,但通过动态补间,因此它将根据我在该 TWEEN 中制作 MovieClip 的 VAR 移动不同的 LOADERS。要做到这一点,我需要为 TWEEN 制作电影...... 多变的。我认为最好的方法是创建一个包含 LOADERS 的所有名称的数组,然后随机调用它们并在 TWEEN 中移动内容。因此我做了一个数组:

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。

如果这些是舞台上 MovieClip 的实例名称,则需要使用如下内容:

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

或者更简单地说:

var myArray:Array = [TheContent, TheContent2];

假设您正在按照时间线工作。


如果TheContent并且TheContent2是您拥有的类,您可以使用getDefinitionByName()您拥有的字符串创建这些类的实例。例子:

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

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

根据您的编辑,这是一个希望能涵盖您的问题的答案。

首先就像我提到的,你的数组包含字符串而不是加载器本身。你想这样做:

var myArray:Array = [ TheContent, TheContent2 ];

请注意没有"包装每个。

要选择一个随机加载器并将其分配给TheVar,请执行以下操作:

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

您现在可以TheVar按预期使用。

于 2012-04-17T05:33:40.233 回答
1

你的问题是这条线

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

random 会给你一个从 0 到 1 的数字

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

假设 random 给你一个值 .75
.75 * 2 = 1.5
当你使用 round 函数时,它会四舍五入到最接近的整数,在这种情况下 2(1.5 和向上四舍五入)
当你有一个 2 时,它就出来了你的数组索引应该给你一个空值。
你需要做的是

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 回答