大熊貓豬·侯佩原創(chuàng)或翻譯作品.歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處.
如果覺得寫的不好請多提意見,如果覺得不錯請多多支持點贊.謝謝! hopy ;)
本篇blog在DinoDefense塔防游戲基礎(chǔ)之上做一處小的修改,如果不知道該游戲是啥,請自行度娘或谷哥補腦…
該游戲在用戶點擊防御塔基座時會彈出購買菜單:
游戲HUD界面上方有用戶剩余金幣數(shù)量,每個防御塔有其自己的價格,如果用戶持有的金幣數(shù)量小于塔的價格,應(yīng)該阻止用戶購買并且在這之前用明顯的視覺提示用戶:錢不夠了!
上圖中顯示的是我對游戲代碼做了修改之后的效果,所以你可以看到如果錢不夠,塔的價格會顯示為紅色.
DinoDefense是一個非常吸引人的塔防游戲,不過在這一點上把修改的機會留給了我們.下面就簡單談?wù)勅绾巫鲞@樣一處小的修改,也非常簡單,希望大家可以堅持看完,希望可以幫助大家一點點 ;]
首先想到的一種做法是在顯示防御塔購買菜單的時候比較塔的價格和剩余金幣的數(shù)量,不過這樣做有2個問題:
1.TowerSelectorNode類中沒有引入GameScene類的實例,意味著你無法讀取到剩余的金幣數(shù)量,你只有添加GameScreen實例作為其屬性,因此你要修改你的初始化方法,比較繁瑣…差評!
2.當(dāng)你彈出防御塔購買菜單后,價格標(biāo)簽的顏色也就不會改變了,如果此時剩余金幣數(shù)量發(fā)生了變化,價格標(biāo)簽無法做對應(yīng)的改變,這顯然是很差的用戶體驗…還是差評!
那么如果既做到較少修改原有代碼又有完美的用戶體驗?zāi)?我們可以用通知!
思考之后的解決辦法如下:首先TowerSelectNode注冊一個GoldChangedNotification通知,當(dāng)在GameScene中用戶剩余金幣發(fā)生變化時則向其發(fā)出通知消息,然后TowerSelectNode做出對應(yīng)處理…完美!
首先在GameScene.Swift中添加通知消息名稱:
let goldChangedNotification = "kGoldChangedNotification"
然后給GaneScene添加實例方法:
func goldDidChanged(){
NSNotificationCenter.defaultCenter().postNotificationName(goldChangedNotification, object: nil, userInfo: ["gold":gold])
}
然后在金幣發(fā)生變化之后立即調(diào)用該方法:
gold -= towerType.cost
goldDidChanged()
然后打開TowerSelectorNode.swift,在init初始化器中添加如下代碼:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(goldChanged), name: goldChangedNotification, object: nil)
最后添加以下2個方法:
fun goldChanged(notification:NSNotification){
let glodLeft = notification.userInfo!["gold"] as! Int
changeTextColorByLeftGold(goldLeft)
}
func changeTextColorByLeftGold(goldLeft:Int){
let towerCost = Int(costLabel.text!)
if towerCost > goldLeft{
costLabel.fontColor = SKColor.redColor()
}else{
costLabel.fontColor = SKColor.whiteColor()
}
}
再次運行游戲,發(fā)現(xiàn)第一次彈出防御塔購買菜單時,標(biāo)簽顏色是錯誤的,但剩余金幣發(fā)生變化后標(biāo)簽的顏色都是正確.
原因很簡單,因為你在防御塔購買菜單初始化的時候沒有考慮到剩余金幣數(shù)量的問題!為了修改這一bug,首先我們在GameSceneHelper.swift(GameSceneHelper是GameScene的超類,gold定義在其中)中添加一個全局變量:
let InitGold = 75
//并且修改gold為該值
var gold:Int = InitGold
這時防御塔購買彈出菜單在任何時候的狀態(tài)都是正確的了:
注意看,當(dāng)剩余金幣大于50時,木塔的價格標(biāo)簽顏色實時變?yōu)榘咨硎敬藭r可以再次購買了,而且購買彈出菜單初始的顏色也是正確的,因為開始石塔是紅色的!
如果那位童鞋由于學(xué)習(xí)需要源代碼的可以找我,也可以自行在網(wǎng)上搜索,最后感謝觀賞,See you next time ;]