2013-02-18 62 views
1

我通过创建一个新类(Fireball.as)并在类名后输入“extends FlxSprite”来为火球创建了一个自定义FlxSprite。在构造函数中,它调用了一个名为“拍摄()”函数,它引导到目标并播放一个声音:为什么我的自定义FlxSprite不出现在舞台上?

private function shoot():void { 
    dx = target.x - x; 
    dy = target.y - y; 
    var norm:int = Math.sqrt(dx * dx + dy * dy); 
    if (norm != 0) { 
     dx *= (10/norm); 
     dy *= (10/norm); 
    } 
    FlxG.play(soundShoot); 
} 


然后,我创建了一个数组来保存在游戏状态下所有的火球(PlayState.as):

public var fire:Array = new Array(); 


然后在我的输入()函数,当有人按下鼠标按钮时,它推动所述阵列中一个新的火球:

if (FlxG.mouse.justPressed()) { 
    fire.push(new Fireball(x, y, FlxG.mouse.x, FlxG.mouse.y)); 
} 


但是当我测试了一下,只播放声音,但火球不露面。我猜测火球是在舞台的后面,但我该如何解决?

如果有帮助,下面是Fireball.as构造:

public function Fireball(x:Number, y:Number, tar_x:Number, tar_y:Number) { 
    dx = 0; 
    dy = 0; 
    target = new FlxPoint(tar_x, tar_y); 
    super(x, y, artFireball); 
    shoot(); 
} 

回答

1

我认为你必须将它们添加到舞台上。

if (FlxG.mouse.justPressed()) { 
    var fireball:Fireball = new Fireball(x, y, FlxG.mouse.x, FlxG.mouse.y); 
    fire.push(fireball); 

    // This line needs to be changed if you add the fireball to a group, 
    // or if you add it to the stage from somewhere else 
    add(fireball); 
} 

让我知道它是否适合你。

+1

谢谢!我忘了将它添加到Flixel。 Flixel拥有自己的自定义函数,用于添加名为add()的函数,这几乎是Flip版本的addChild()。非常感谢! – dizzydj7 2013-02-18 00:41:28

+0

你可以向我发送代码,Flixel将它添加到舞台上吗?声音可以在没有增加舞台的情况下播放,所以。 – vikingmaster 2013-02-18 00:42:43

+0

我改变了我以前的评论。谢谢! – dizzydj7 2013-02-18 00:45:49

0

如前所述,问题是由于未将FlxSprite添加到Flixel显示树。但我也建议你使用FlxObject groups而不是简单的数组。

FlxGroups是方式比数组结构更好的数据结构。例如,他们继承了FlxObject的所有方法,因此您可以直接检查组中是否存在冲突,还可以使用特定方法处理对象集合,例如countDeadcountAlive(如果您使用alive属性), recyclegetFirstDead等。

看看,你不会失望。 :)

相关问题