为什么我的自定义FlxSprite不会出现在舞台上?

时间:2013-02-18 00:32:52

标签: actionscript-3 flixel

我通过创建一个新类(Fireball.as)并在类名后输入“extends FlxSprite”为火球创建了一个自定义FlxSprite。在构造函数中,它调用一个名为“shoot()”的函数,该函数将其定向到目标并播放声音:

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();


然后在我的input()函数中,当有人按下鼠标按钮时,它会在数组中推送一个新的Fireball:

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();
}

2 个答案:

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

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

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

看看,你不会失望。 :)