2013-02-18 45 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等。

看看,你不會失望。 :)

相關問題