0

私は約2週間as3を学んでいます

個人用のコンボジェネレーターを作ろうとしています

問題は、配列内の同じ MovieClip が 2 回以上表示されると、単に重なってしまうことです。

たとえば、エルボーが 2 回目に表示されると、最初のエルボー ムービークリップと重なるだけです。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 つの「エルボー」が表示されることを望んでいると思いますか? Elbow クラスのインスタンスが 1 つしかないので、それは機能しません。

整数を受け取り、適切な 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 に答える