扑晡差大年夜的应用 ARKit 的处所应当就是在这里的 anyPositionFrom(_:) 办法。在这里应用点击测试 hitTest(_:_:),决定有没有点触到屏幕上随便率性一?特点点。如不雅有的话,那么就应用一个对 SCNVector3 的扩大,把取得的实际世界的坐标转换成虚拟世界的坐标。接下来的各类操作,就都转换成虚拟世界的坐标系啦。
- bottleNode.runAction(SCNAction.group(actions), completionHandler: { [weak self]
- // 获合适缁ゎ后一个方块,也就是这个瓶子要跳以前的方块
- let boxNode = (self?.boxNodes.last!)!
- // 如不雅这个方块没包含了瓶子,那么竽暌刮戏掉败
- if (self?.bottleNode.isNotContainedXZ(in: boxNode))! {
- // 记录高分、提示掉败等
- } else {
- // 如不雅包含,那么竽暌刮戏持续,生成下一?方块
- ...
- generateBox(at: (self?.boxNodes.last!.position)!)
- }
- })
- }
第二个生成方块的处所是在棋子成功落鄙人一?方块时,具领会在后文解释。
2.2 让婵子跳
前面提到,我们要覆写 touchesBegan(_:_:) 和 touchesEnd(_:_:)。
在“跳一跳”中,决定瓶子能飞多远的身分是按压屏幕的时光。经由过程这两个办法,一个开端一个停止,就可以获得开端按压和停止按压的时光,再作差就可以轻松获得一次按压的时光长度。再经由过程这个长度进行一些函数计算,就可以获得下一次要活动的距离。于是,很多关键逻辑就都可以放在这两个办法里。
【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?
起首,声明一个 tuple,记录按压屏幕的肇端和终止时光:
- private var touchTimePair: (begin: TimeInterval, end: TimeInterval) = (0, 0)
然后,声明一个闭包,用来经由过程时光差计算活动距离,这里我们简单地进行一个除法运算:
- private let distanceCalculateClosure: (TimeInterval) -> CGFloat = {
- return CGFloat($0) / 4.0
- }
下面是这两个办法。按压开端时:
- override func touchesBegan(_ touches: Set,
推荐阅读
还在用浏览器内的「保存密码」功能?你的密码可能被黑客记下来了
【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?安然研究人员发明,营销公司已经开端应用浏览器内置暗码治理器中已存在 11 年的一个马脚,来偷偷盗取你的电子邮件地址,>>>详细阅读
本文标题:用ARKit做一个仿微信"跳一跳"游戏
地址:http://www.17bianji.com/lsqh/40272.html
1/2 1