9edf4d6cfdb15b6dfb37f495fe221f80
Swift 游戏开发之「方块弹珠」(一)

前言

在上一篇文章中,我们已经明白了「蜗牛睡不着」的游戏背景,知道我们要去完成的游戏是什么。在正式进入真正的游戏开发之前,为了有一个较好的过渡,我们先来利用 UIKit 框架本身的一些物理模拟能力,完成一些有趣的 demo,来协助我们理解一些游戏开发的中经常遇到的概念。

UIKit 物理模拟

self.animator = UIDynamicAnimator(referenceView: view)
let redView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
redView.backgroundColor = .red
view.addSubview(redView)
let gravity = UIGravityBehavior(items: [redView])
self.animator?.addBehavior(gravity)

为视图添加重力

为视图添加重力

let collision = UICollisionBehavior(items: [redView])
collision.translatesReferenceBoundsIntoBoundary = true
self.animator?.addBehavior(collision)

为视图添加碰撞

为视图添加碰撞

默认情况下,碰撞的边界和容器视图的边界是相同的,如果我们想将碰撞边界设置为容器边界往内缩进一些,可以这么做:

collision.setTranslatesReferenceBoundsIntoBoundary(with: UIEdgeInsets(top: 50, left: 50, bottom: 50, right: 50))

2019-11-21 22.36.56.gif

2019-11-21 22.36.56.gif

let anchor = CGPoint(x: self.view.bounds.width / 2, y: 100)
let attachment = UIAttachmentBehavior(item: redView, attachedToAnchor: anchor)
self.animator?.addBehavior(attachment)

添加附着物

添加附着物

物理引擎的相关术语

这部分内容我纠结了一下,觉得还是有必要跟大家说明,回想我当初接触物理引擎时,因为一下子进入陌生的领域,很多基础概念需要补,为了一次到位,跟大家分享几个后续游戏开发过程中会经常接触到的术语。

向量

这部分应该是高中数学。在游戏中,向量通常用来描述位置速度。因为向量的内容实在太多,一一说完感觉都能开个辅导班了,因此我只列出一部分后续游戏中可能会用到的重点内容提示,细节大家有时间再自行展开。

向量的长度

移动向量

向量相加

top Created with Sketch.