我正在尝试使用加速度计数据模拟物体的方向,并且很难获得平滑的动画。
我有一个大的加速度计数据文件,并希望使用从加速度计数据计算的俯仰和滚动值来动画方向。数据以恒定的时间间隔进行采样,我认为可以通过将持续时间=设置为采样时间(可以在80ms和640ms之间变化)来近似采样。
下面的代码似乎不起作用,改变持续时间似乎对动画转换到新方向所花费的时间没有影响。
正确的方法是使身体的方向变化动画化,并能够调整模拟速度,使其接近实际时间或其倍数?
func animate(scan: ScanData) {
if let accel = scan.next() {
let orientation = accel.orientation
let start = scan.startTimeString
let time = StringFromDate(scan.dateFromTime(orientation.ms)!)
let pitch = Double(DegreesToRadians(0.0))
let yaw = Double(DegreesToRadians(CGFloat(orientation.roll)))
let roll = Double(DegreesToRadians(CGFloat(orientation.pitch)))
CATransaction.begin()
CATransaction.setCompletionBlock({
animate(scan)
})
bodyNode.eulerAngles = SCNVector3(pitch, yaw, roll)
CATransaction.setAnimationDuration(0.16)
CATransaction.commit()
} else {
print("No more data")
return
}
}
对于SceneKit隐式动画使用SCNTransaction(不是cattransaction)。