2016-02-05 44 views
0

我在我的3D世界中的兩個SCNNode A和B. A由用戶移動,而B具有使其從左向右移動的動作。這是B上的動作:將當前運行的SCNAction應用到另一個SCNNode

let moveDirection: Float = position.x > 0.0 ? -1.0 : 1.0 
let moveDistance = levelData.gameLevelWidth() 
let moveAction = SCNAction.moveBy(SCNVector3(x: moveDistance * moveDirection, y: 0.0, z: 0.0), duration: 10.0) 
let action = SCNAction.runBlock { node -> Void in 
} 
carNode.runAction(SCNAction.sequence([moveAction, action])) 

A和B可發生碰撞,並且如果觸摸B,則A具有開始與乙​​移動如同它們是一個單獨的對象,直到用戶使用命令來移動A.碰撞在方法

func physicsWorld(world: SCNPhysicsWorld, didBeginContact contact: SCNPhysicsContact) 

檢測到,但我不知道用什麼辦法我應該做與B.我想申請新的職位,或者如果可能的訴訟文書的副本一招,將當前正在執行的動作應用於節點A.我還想過讓A成爲B的子節點,然後將其移回到根節點,但似乎不起作用。

回答

1

溶液簡單地訪問該介入了與此代碼衝突的節點上當前運行SCNAnimations:

let action: SCNAction = contact.nodeB.actionForKey("MovementAction")! 
contact.nodeA.runAction(action) 

一旦你對當前的行動的參考,你可以在運行其他節點,並且它將被精確地鏡像。

注意:請記住在創建動作時指定動作的關鍵點,否則此方法將不起作用。

相關問題