SpriteKit 塔防游戲動態(tài)改變防御塔價格標(biāo)簽的顏色

大熊貓豬·侯佩原創(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 ;]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,102評論 4 61
  • 在人的一生中,平等的只有生與死。在這個生與死過程中各自的人生中有的功成名就,成功與他們相伴,而有的人常與失...
    悟_bf17閱讀 439評論 0 0
  • 中午上班,忽然看到有馬車經(jīng)過,兩匹馬拉著一車木桿兒噠噠地走著,幾十根木桿堆的高高的,碗口粗細,每根都有五六米長,馬...
    鉛筆芒種閱讀 431評論 0 1
  • 觀望了簡書也有一個月了,綜合測評這APP不錯,不像其他軟件一般充斥著廣告,這片凈土還么有受到污染。 猴年開始了,我...
    宋南雪閱讀 176評論 0 0
  • 這是基度、黛麗、祖舒華一家三口的經(jīng)歷。這是一個開始充滿歡笑,卻在笑中帶淚的故事。 基度和黛麗從開始的第一次相遇到他...
    肖麗娟_閱讀 763評論 0 3

友情鏈接更多精彩內(nèi)容