Movieclips重叠

时间:2013-06-09 10:18:59

标签: actionscript-3

我已经学习了3个星期

我正在尝试为个人用途制作组合生成器

问题在于,如果数组内的相同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));
}

3 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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;
}