而這遊戲中不是以血條的方式呈現HP,而是用花朵來表示(共五朵花)
當受到傷害後,花會消失
相反HP恢復後,花朵會重新出現
要實現此效果,這裡使用的方法是「開/關HP圖片的顯示」
花朵(HP)的位置是事先固定好的,HP有所更動時,才開關Image
因此程式碼需要做的,就只是那個開關
HP這東西,它的上限很多時會因一些道具、升級之類的而提升
因此一開始宣告HP的圖片時,是用GetChild的方式來宣告,以便日後增加HP時,不用重新宣告
至於MaxHP的數值,可以用transform.childCount來獲得
HP圖片宣告後之後,用兩個數值來偵察HP有沒有更動
一個是GameManager裡的HP(受到傷害時即時扣減)
而另一個是LastHP,當LastHP不等於PlayerHP時,就會呼叫HPChange來更動花朵數目
呼叫完之後,LastHP的數值亦相等於PlayerHP
在HPChange裡,宣告一個參數,計算PlayerHP - LastHP的結果
假設原先HP為5,亦即LastHP = 5。這時若受到一點傷害,PlayerHP變為4
那麼得出來的結果是-1,表示這是受到傷害
因而執行「花朵消失」的程式裡(扣HP)
反之,則執行「花朵出現」的程式(恢復HP)
而這兩套程式,結構基本上一樣,只是參數上的不同
在程式裡設立一個for loop,偵察扣減了多少HP
然後在loop裡面的a數值,其實等同PlayerHP的數值
要特意分開的原因,是為免HP的顯示出現問題
因為受到傷害時,可能不只扣減1 HP
當受到超過2或以上的傷害時,直接使用PlayerHP的話會產生錯誤
左邊是使用PlayerHP計算的結果,而右邊是使用 i 值
因此,假若每次傷害固定只有1點的話,PlayerHP會較方便
但若多點傷害時,使用loop來計算才避免顯示錯誤
最後,通常HP這類數值,都有可能一次「扣減/恢復」超過「下/上」限
因此當超過時,要把數值拉回來,不然可能出現些錯誤訊息
至於HP歸零時,因為這遊戲的死亡動畫,不是更改玩家的動作,而是獨立一套動畫
所以寫在PlayerHP的腳本裡,以方便管理
沒有留言:
張貼留言