SpriteKit塔防游戏动态改变防御塔价格标签的颜色
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)
本篇blog在DinoDefense塔防游戏基础之上做一处小的修改,如果不知道该游戏是啥,请自行度娘或谷哥补脑…
该游戏在用户点击防御塔基座时会弹出购买菜单:
游戏HUD界面上方有用户剩余金币数量,每个防御塔有其自己的价格,如果用户持有的金币数量小于塔的价格,应该阻止用户购买并且在这之前用明显的视觉提示用户:钱不够了!
上图中显示的是我对游戏代码做了修改之后的效果,所以你可以看到如果钱不够,塔的价格会显示为红色.
DinoDefense是一个非常吸引人的塔防游戏,不过在这一点上把修改的机会留给了我们.下面就简单谈谈如何做这样一处小的修改,也非常简单,希望大家可以坚持看完,希望可以帮助大家一点点 ;]
首先想到的一种做法是在显示防御塔购买菜单的时候比较塔的价格和剩余金币的数量,不过这样做有2个问题:
- TowerSelectorNode类中没有引入GameScene类的实例,意味着你无法读取到剩余的金币数量,你只有添加GameScreen实例作为其属性,因此你要修改你的初始化方法,比较繁琐…差评!
- 当你弹出防御塔购买菜单后,价格标签的颜色也就不会改变了,如果此时剩余金币数量发生了变化,价格标签无法做对应的改变,这显然是很差的用户体验…还是差评!
那么如果既做到较少修改原有代码又有完美的用户体验呢?我们可以用通知!
思考之后的解决办法如下:首先TowerSelectNode注册一个GoldChangedNotification通知,当在GameScene中用户剩余金币发生变化时则向其发出通知消息,然后TowerSelectNode做出对应处理…完美!
首先在GameScene.swift中添加通知消息名称:
let goldChangedNotification = "kGoldChangedNotification"
然后给GaneScene添加实例方法:
func goldDidChanged(){NSNotificationCenter.defaultCenter().postNotificationName(goldChangedNotification, object: nil, userInfo: ["gold":gold])}
然后在金币发生变化之后立即调用该方法:
gold -= towerType.costgoldDidChanged()updateHUD()
然后打开TowerSelectorNode.swift,在init初始化器中添加如下代码:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(goldChanged), name: goldChangedNotification, object: nil)
同样需要在析构方法中调用解除监听:
deinit{NSNotificationCenter.defaultCenter().removeObserver(self)}
最后添加以下2个方法:
func changeTextColorByLeftGold(goldLeft:Int){let towerCost = Int(costLabel.text!)if towerCost > goldLeft{costLabel.fontColor = SKColor.redColor()}else{costLabel.fontColor = SKColor.whiteColor()}}func goldChanged(notification:NSNotification){let goldLeft = notification.userInfo!["gold"] as! IntchangeTextColorByLeftGold(goldLeft)}
再次运行游戏,发现第一次弹出防御塔购买菜单时,标签颜色是错误的,但剩余金币发生变化后标签的颜色都是正确.
原因很简单,因为你在防御塔购买菜单初始化的时候没有考虑到剩余金币数量的问题!为了修改这一bug,首先我们在GameSceneHelper.swift(GameSceneHelper是GameScene的超类,gold定义在其中)中添加一个全局变量:
let InitGold = 75
//并且修改gold为该值
var gold:Int = InitGold
然后回到TowerSelectorNode.swift的setTower方法中添加如下一行:
changeTextColorByLeftGold(InitGold)
这时防御塔购买弹出菜单在任何时候的状态都是正确的了:
注意看,当剩余金币大于50时,木塔的价格标签颜色实时变为白色表示此时可以再次购买了,而且购买弹出菜单初始的颜色也是正确的,因为开始石塔是红色的!
如果哪位童鞋由于学习需要源代码的可以找我,也可以自行在网上搜索,最后感谢观赏,See you next time ;]
SpriteKit塔防游戏动态改变防御塔价格标签的颜色相关推荐
- 好玩的Java塔防游戏,比较火的塔防手游!塔防游戏排行榜推荐
十年之前,我在同学的诺基亚上玩过一款非常好玩的JAVA塔防手游,具体的名字虽然忘了,但当时连续通宵好几个晚上对其喜爱的热情至今也无法忘记.回到现在,手游也从之前的单机到现在的多人联网,玩法上更是增加了 ...
- unity塔防游戏怪物转向_浅谈塔防游戏的“进化史”,独特创意把“策略至上”推到新的高度...
塔防游戏的起源是一款叫<堡垒>的街机游戏,虽然说该游戏和目前的塔防游戏还有一些区别,但是目前的塔防游戏基本上都有借鉴这个游戏的内容,说它是塔防游戏的鼻祖也不为过.真正把塔防游戏带到大家面前 ...
- IOS塔防游戏《坦克对大炮》的开发设计记录
IOS塔防游戏<坦克对大炮>的开发设计记录 引子 游戏已经在App Store上线几个月了,一直很想写点什么记录一下.真要写的时候,却又发现无从下笔没啥好写的.在2012年进入IOS,对于 ...
- 塔塔帝国服务器维护一般多久,塔塔帝国玩法攻略 策略性一般不氪金的塔防游戏...
最近在某平台上发现了这样一款塔防游戏,说起塔防游戏,那是我逝去的青春啊!之前玩过的<塔防三国志>系列,到现在还仍然觉得颇有意思,时不时还会捡起当时的旧手机,还是那种小屏幕的,点开体验一下, ...
- unity塔防游戏怪物转向_野生防御塔游戏下载-野生防御塔游戏安卓版 v1.0
野生防御塔是一款塔防策略类型的游戏,经典好玩的塔防策略玩法等你来,在这开启一场刺激的塔防吧.你需要依靠塔防建筑抵挡怪物的攻击,同时也需要面对对手的偷袭.依靠击杀怪物获得的金币可以购买一些道具升级你的塔 ...
- QT 框架搭建,用最原始的方法实现简单的塔防游戏 | 原力计划
作者 | 白家名 责编 | 王晓曼 出品 | CSDN博客 本文作者使用 QT 框架写了一个塔防游戏程序,该程序中实现了购买炮塔.炮塔升级.怪物按照设定路径移动.炮塔自动寻找范围内目标.朝目标怪物发射 ...
- QT实现简单的塔防游戏
QT实现简单的塔防游戏 该程序中实现了购买炮塔.炮塔升级.怪物按照设定路径移动.炮塔自动寻找范围内目标.朝目标怪物发射炮弹.爆炸效果.怪物走到家时我方生命值减少.方便添加关卡等功能. 另附重构版本代码 ...
- 使用Unity创建塔防游戏(Part1)
How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...
- 用Unity开发一款塔防游戏(一):攻击方设计
大家好.偶尔想起了这个手把手教学的.但现已长满杂草的坑,还是来挖几铲子. 这一期的游戏是最常见的类型之一--塔防. 塔防游戏相信大家并不陌生,几个主要元素如下: 1.敌方士兵 2.我方防御塔 3.我方 ...
最新文章
- 用JTAG将mcs文件烧写到flash中
- 如何设计一个良好的接口?
- python统计分析--2.预分析:异常值、缺失值处理
- 初学C#和MVC的一些心得,弯路,总结,还有教训(4)--Cache 关于创建多个缓存实例
- 【转】Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES
- python入门基础教程-Python入门基础教程:WSGI
- access() 函数 c++
- MATLAB2016b安装包
- 蓝牙抓包工具选择android,Android 蓝牙抓包
- Ubuntu18.04下编译tslib触摸屏驱动
- 智能聊天机器人平台的架构与应用
- 【学术技巧】论文答辩,老师会仔细看论文内容吗?
- 一堆Offer怎么选?这样做就不纠结了
- HD44780http://blog.sina.com.cn/s/blog_61b6e08b01016xif.html
- 农产品溯源中GIS应用
- python如何安装pip3_Python3中安装pip3
- 二进制差分码规则_一篇文章弄明白Node.js与二进制数据流
- 《Total Commander:万能文件管理器》——第2.2节.快速了解一款软件的4条途径
- 全国计算机一级课件,2017全国计算机一级考试习题及答案课件.doc
- 火山引擎 A/B 测试私有化实践