我创建了一个可供玩家移动的SceneKit 3D迷宫世界。一些像跳跃这样的动作涉及在上下移动照相机的同时在几秒钟的时间内改变视角。在此期间,我想忽略用户的点击和挥动,这通常会导致其他类型的动作,如转动和向前移动。检查SCNNode SCNAction是否已完成
我可以创建相匹配的跳跃时间,并设置一个布尔值,但我希望检查摄像机的SCNNode的simplier方式的计时器。
有一个简单的方法,如果摄像机的SCNNode不再运行SCNAction的跳转,所以我可以在其他轻触和滑动操作的前面加上这样的逻辑?
或者也许有一个SCNAction可以设置布尔,我可以在我的跳转序列的开始和结束?
这里是我的跳码:
let jumpUp: SCNAction = SCNAction.move(to: SCNVector3Make(Float(Int(-yPos)), Float(Int(xPos)), jumpHeight), duration: jumpTime)
let jumpAppex: SCNAction = SCNAction.wait(duration: jumpWaitTime)
let fallDown: SCNAction = SCNAction.move(to: SCNVector3Make(Float(Int(-yPos)), Float(Int(xPos)), cameraHeight), duration: jumpTime)
var lookDown: SCNAction = SCNAction.rotateTo(x: 0, y: 0, z: CGFloat(π), duration: jumpTurnTime)
let noLook: SCNAction = SCNAction.wait(duration: jumpTime*2.0)
var lookBack: SCNAction = SCNAction.rotateTo(x: 0, y: 0, z: 0, duration: jumpTurnTime)
switch playerDirection.direction
{
case .south:
lookDown = SCNAction.rotateTo(x: 0, y: 0, z: CGFloat(southZ), duration: jumpTurnTime)
lookBack = SCNAction.rotateTo(x: CGFloat(π/2), y: 0, z: CGFloat(southZ), duration: jumpTurnTime)
case .north:
lookDown = SCNAction.rotateTo(x: 0, y: 0, z: CGFloat(northZ), duration: jumpTurnTime)
lookBack = SCNAction.rotateTo(x: CGFloat(π/2), y: 0, z: CGFloat(northZ), duration: jumpTurnTime)
case .east:
lookDown = SCNAction.rotateTo(x: 0, y: 0, z: CGFloat(eastZ), duration: jumpTurnTime)
lookBack = SCNAction.rotateTo(x: CGFloat(π/2), y: 0, z: CGFloat(eastZ), duration: jumpTurnTime)
case .west:
lookDown = SCNAction.rotateTo(x: 0, y: 0, z: CGFloat(westZ), duration: jumpTurnTime)
lookBack = SCNAction.rotateTo(x: CGFloat(π/2), y: 0, z: CGFloat(westZ), duration: jumpTurnTime)
}
let sequenceJump = SCNAction.sequence([jumpUp, jumpAppex, fallDown])
let sequenceLook = SCNAction.sequence([lookDown, noLook, lookBack])
mazeScene.mazeCamera.runAction(sequenceJump)
mazeScene.mazeCamera.runAction(sequenceLook)
感谢
格雷格
有一个''runBlock' SCNAction',你可以只添加到您的顺序和定块内的布尔。还有一个'runAction:completionHandler'方法在动作完成时运行一个块。 –
原因苹果无法记录自己的最佳功能,因为这是你即将看到的。 IMNSHO,这是最好和最强大的行动,几乎完全没有记录,并且从未提升它的内容,可以并且代表着承诺和潜力:https://developer.apple.com/reference/scenekit/ scnaction/1523692-customaction – Confused