0

我已经学习 as3 大约 2 周了

我正在尝试制作一个供个人使用的组合生成器

问题是,如果数组中的同一个 MovieClip 显示两次或更多次,它只会与它重叠。

例如,当第二次显示肘部时,它恰好与第一个肘部动画剪辑重叠!http://imageshack.us/scaled/landing/208/17797019.png

这是我的代码

var punch:Punch = new Punch();
var kick:Kick = new Kick();
var knee:Knee = new Knee();
var elbow:Elbow = new Elbow();
var holder:MovieClip; // for displaying purposes 
var position:Number = 100;

public function Main()
{
    var combo:Array = [punch, kick, knee, elbow];
    for(var i:Number = 0;i < 2;i++ )
    {
        holder = combo[randomNumber()]
        holder.y = 200;
        holder.x = position;        
        addChild(holder);
        position = position + 100;
    }


}
function randomNumber():Number
{
    return(Math.floor(Math.random() * (4 - 1 )+1));
}
4

3 回答 3

1

尝试像这样更改您的代码:

public function Main()
{
    var combo:Array = [Punch, Kick, Knee, Elbow];
    for(var i:Number = 0;i < 2;i++ )
    {
        var motion:MovieClip = new combo[randomNumber()]();           
        motion.y = 200;
        motion.x = i*100;        
        addChild(motion);
    }    
}
function randomNumber():Number
{
    return(Math.floor(Math.random() * (4 - 1 )+1));
}
于 2013-06-09T10:20:42.233 回答
0

我认为您真正的问题是您首先在该数组中有多次对象。我猜你想添加 2 个肘部;一左一右。这意味着您需要 2 个肘部对象(对象的工作方式是您有一个类,许多实例。同一个实例不能在多个地方,因为它只有一组属性)

所以你需要制作(比如说)var elbowL:Elbow = new Elbow(); var elbowR:Elbow = new Elbow();并将两者都添加到数组中。

至于重叠,我相信一个对象只能添加到舞台上一次,所以第二次添加它会替换第一次。在这种情况下,这并没有什么区别(除了改变 z 顺序);一旦你改变它的xy属性,肘部就会被移动。通过我上面建议的更改,这不再是问题。

于 2013-06-09T10:47:28.693 回答
0

我假设您希望同时出现两个“肘部”?好吧,你只有一个 Elbow 类的实例,所以这不起作用。

我建议你有一个函数,它接受一个整数,并返回适当的 MovieClip 的新实例:

function NewMove(id:int):MovieClip
{
    switch(id)
    {
        case 1: return new Punch();
        case 2: return new Kick();
        case 3: return new Knee();
        case 4: return new Elbow();
    }
    return new MovieClip();
}

所以你的代码是:

for(var i:Number = 0;i < 2;i++ )
{
    holder = NewMove(randomNumber());
    holder.y = 200;
    holder.x = position;        
    addChild(holder);
    position = position + 100;
}
于 2013-06-09T17:23:08.147 回答