2014-02-10 56 views
1

嘿大家如此試圖做到這一點有點麻煩。我明白如何通過舞臺上的動態文本字段添加生活並顯示它們。我的遊戲現在正在設置,以便發生這種情況,並且每當玩家死於現場減量時,它就可以正常工作。如何在遊戲AS3中顯示玩家的生活

但我想要顯示的和所有3生活的圖像生活在Flash CS6中繪製的自定義電影剪輯來表示生活。因此,所有3條生命將在遊戲中顯示,一旦玩家死亡,其中一條生命圖像被移除。

我對做什麼有一些想法。例如,我創建了一個「for循環」來在屏幕上顯示所有3個圖像,並創建變量以將它們水平放置,並具有30像素的空間。

但我不確定這是否是正確的方法來解決這個問題。還有一種困惑,我會如何刪除其中一個圖像時,玩家死亡?

她是到目前爲止我的代碼:

public var playerLives:mcPlayerLives; 
    private var nLives:Number = 3; 
    private var startPoint:Point; 
    private var aPlayerLivesArray:Array; 

在我的主類發動機:

aPlayerLivesArray = new Array; 
addPlayerLivesToStage(); 

然後addplayerlivestostage功能:

public function addPlayerLivesToStage():void 
    { 

     var startPoint:Point = new Point((stage.stageWidth/2) - 300, (stage.stageHeight/2) - 200); 
     var xSpacing:Number = 30; 

     for (var i = 0; i < nLives; i++) 
     { 
      trace(aPlayerLivesArray.length); 
      playerLives = new mcPlayerLives(); 
      stage.addChild(playerLives); 
      playerLives.x = startPoint.x + (xSpacing * i); 
      playerLives.y = startPoint.y; 
      aPlayerLivesArray.push(playerLives); 
     } 
    } 

所以像我說上面一切正常很好,它確實顯示了代表生命的三幅圖像,但這是否正確或者有沒有更簡單的方法?

回答

1

我認爲你使用正確的方式來增加生命。 並刪除它們,你不需要刪除所有並添加新的生命,你可以刪除最後一個元素的生命陣列,所以,它已經完成,我認爲這已經是一個簡單的方法

所以,你可以實現這

for (var i = 0; i < nLives; i++) 

,以做出更好的使用情況「在遊戲中加入生活(收入生活)」 像

for (var i = aPlayerLivesArray.length; i < nLives; i++) 

但不要忘記1的用於除去最後一個元素之後減少數組長度當玩家di es

+0

感謝您的幫助。但仍然有點困惑,所以在一個單獨的函數中,我有一個名爲「checkPlayerHitShark」的gameloop,它可以檢測玩家是否擊中了鯊魚。所以當玩家鉤子擊中鯊魚時,我希望生命減少1,所以你說我知道我需要一個nLives - ;但不完全確定如何在for循環中使用它。它不會刪除圖像生活在屏幕上。它確實減少了它。我應該做一個獨立的函數,如上所述,刪除一個生活,然後在我的「Checkplayerhitshark」函數中調用它? – Nathan

+0

好吧,只需要弄清楚如何從屏幕上刪除電影剪輯圖像的生命。我試過一些東西 – Nathan

+0

是的,最好你應該使用另一個功能來消除生命。但是你不需要使用另一個函數來在我的工具中添加生命。但是如果你只想使用1個函數來添加和刪除,實際上這不是「很好」,但它很好......你可以減少nLives 1,然後移除livesArray的所有元素並設置livesArray.length = 0;那麼你可以使用你自己的功能再次增加生命,這使得它看起來像活着被刪除,但實際上所有的生命都被刪除,並由新的nLives價值再次添加。 –

1

看起來非常接近合理的方法。我會在舞臺上有一個空白的容器動畫片段,您想要顯示生活圖標。在您的圖書館中創建一個生命圖標,並將其與動作鏈接導出。當您生成遊戲視圖時,您可以用三條生命的起始值填充此容器。放置第一個,然後根據第一個位置放置後續的。

一些未經測試代碼:

注:以下假定爲生命的容器夾命名爲lives_container,並在庫中的生活圖標,你的鏈接實例名稱是Life_icon

var numberOfLives:Number = 3; 
var iconSpacing:Number = 5; 
var nextX:Number = 0; 

for(var i:int = 0; i < numberOfLives; i++) 
{ 
    var icon:MovieClip = new Life_icon(); 
    icon.x = nextX; 
    lives_container.addChild(icon); 

    nextX += icon.width + iconSpacing; 
} 

這種方式,你可以很容易地添加額外的生活,如果玩家通過在最後nextX增值的新圖標,像這樣獲得的任何:

function addLife():void 
{ 
    var icon:MovieClip = new Life_icon(); 
    icon.x = nextX; 
    lives_container.addChild(icon); 

    nextX += icon.width + iconSpacing; 
} 

或作爲球員失去他們刪除:

function removeLife():void 
{ 
    var numberOfLivesDisplayed:Number = lives_container.numChildren(); 
    lives_container.removeChildAt(numberOfLivesDisplayed - 1); 

    nextX -= icon.width + iconSpacing; 
} 

使用的容器夾,用於生活的圖標使得調整的生活更輕鬆的圖標的位置,如果以後需要。

+0

因此,我創建了一個removePlayerLive()函數,並且我在checkPlayerHitShark()函數內調用了該函數。所以每當hittest發生時,我希望該功能啓動。但我不知道如何增加它以減少生命,並從屏幕上移除一個playerLives圖像。我有這在刪除函數:for(var i = 0; i Nathan

+1

你真的需要離開舞臺。按照我的例子,你應該把生命放入容器動畫片段。你的舞臺上有各種各樣的東西,這使得刪除其顯示列表中的兒童成爲問題。另外,我不明白你爲什麼使用循環。錯誤「顯示必須是調用者的孩子...」是因爲調用removeChild()來獲取舞臺上不存在的動畫片段的結果。當你的玩家死亡時,你只需要每死一次就消除一次生命,而不是通過它們循環。另請注意,我發佈的代碼不會嘗試執行除了管理生命顯示之外的任何操作。 – Ribs