这几天跟着视频教程,一个跑酷游戏。一边按着暂停键,一边苦苦思考并在自己理解的范围内,迷迷糊糊写下一堆注释。 心中不断的安慰自己: “啊,这个比上一个练习难多了...不错,有进步......”。因为教程是swift2.0的,到现在swift4.0,很多的代码不能编译了,大部分xcode9都能提示 fix,还是因为有那么几个坑,才造成我到今天才基本完工。
晚上传到真机上跑了一下,正常运行,就是物体移动速度好像不太对劲,比在模拟器上快了不止一倍。还没研究到底怎么回事。原程序缺少一些功能: 分数记录、 启动画面、 游戏暂停、 结束画面。也不知道怎么实现,留着坑以后再填吧!现在运行停不下来, gameover后会马上重新开始,我强行加了个休眠5秒的参数,给人一点精神上的缓冲,嘿嘿
Thread.sleep(forTimeInterval: 5.0)
需要加个重新开始的按钮,但是不知道怎么实现,反正这个几个类、方法相互调来调去,逻辑还需要梳理。
我感觉这样学习很好,看一段时间理论,必须要来一段实战课,有助于对理论、语法的理解。当然,感触最深的还是英语的重要啊。所有函数其实都用的能让人快速理解的长句命名,如果英语好的话,简直事半功倍。有一次写个长函数,用的代码补全,只看了结尾的单词好像没错,因为都不认识,也就自然把中间的单词自动忽略了,结果xcode9也没报错,编译也通过,就是有物体不能正常显示,翻来覆去检查半天,才找到这个错,中间单词补错了,当然,到现在我也没时间去核实到底神马意思,各自有啥效果。
就是这个categoryBitMask
补全成了collisionBitMask
if (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask) == (BitMaskTpye.scene | BitMaskTpye.panda)
有一个最大的坑,报的黄色警告,当时也没仔细看说明,编译成功,就是模拟器一运行就闪退,日志都指向这个方法参数调用有问题Timer.scheduledTimer
,带的一堆参数# scheduledTimer(timeInterval:target:selector:userInfo:repeats:)
在swift官方文件也就看到这一步,(时间:目标:选择器:用户信息:是否重复)。提示选择器有问题,不能调用到别的方法,xcode居然提示的Fix
是加多一个括号来忽略错误,就是这个坑人的提示,害得我折腾了两天,还是英文不好的原因,之前也没仔细看提示就按了Fix
,实在是......
好在,在翻了一大堆网页后,终于找到问题之所在,swift4.0在用selector
用字符串调用方法时,在方法的前面需要加上@objc
:
func onInit(width:CGFloat, y:CGFloat) {
self.sceneWidth = width
self.theY = y
timer = Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(AppleFactory.createApple), userInfo: nil, repeats: true)
}
@objc func createApple() {
当我把一个一个bug排除掉,即便是很低级的错误,也是很有满足感,就是在过程中很抓狂,也耽误了我健身的时间,因为没解决问题,不敢分心做其它,不过,以后会调整这种状态......
夜深了,今天先写到这里