
266
|
第
9
章
9.2
让对象朝某个点移动
问题
我们想让一个对象朝另一个对象运动。
解决方案
将该对象的当前位置减去目标位置,所得结果进行规范化,然后乘以移动速度。然
后,将结果与当前位置相加:
//
计算到达这个位置的方向
var offset = self.position - targetPosition
//
规范化
offset
向量,使其长度和移动速度等长
offset = offset.normalized
offset *= CGFloat(self.movementSpeed) * deltaTime
//
加到当前位置
let newPosition = self.position + offset
self.position = newPosition;
讨论
当你向某个对象移动时,我们需要知道目标方向。目标方向可以通过目标位置减去
当前位置获得,所得结果是一个向量。
假设你当前位置为
(0,5)
,你准备以每秒
1
单位的速度向位置
(1,8)
处移动。则首先
用目标位置减去当前位置:
My Location = [0, 5]
Target Location = [1, 8]
Offset = Target Location - My Location
= [1, 8] - [0, 5]
= [1, 3]
但是,这个向量的长度会受目标位置距离远近的影响。如果我们想以匀速向目标移
动,我们需要让这个向量的长度为
1
,然后乘以移动速度。