我已经学习了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));
}
答案 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顺序);一旦更改了x
或y
属性,肘部就会被移动。根据我上面提到的改变,这不再是一个问题。
答案 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;
}