在处理场景套件应用程序时,我有 2 个盒子可以相互射击以获得点数。这是第一个框需要射击的位置的计算:
shot1 = SCNNode()
shot1.geometry = SCNSphere(radius: 0.5)
shot1.physicsBody = SCNPhysicsBody.dynamic()
shot1.position = SCNVector3Make
(boxNode1.position.x,
boxNode1.position.y + 1,
boxNode1.position.z - 1)
scnScene.rootNode.addChildNode(shot1)
Run Code Online (Sandbox Code Playgroud)
对于第二个框:
shot2 = SCNNode()
shot2.geometry = SCNSphere(radius: 0.5)
shot2.physicsBody = SCNPhysicsBody.dynamic()
shot2.position = SCNVector3Make
(boxNode2.position.x,
boxNode2.position.y + 1,
boxNode2.position.z + 1)
scnScene.rootNode.addChileNode(shot2)
Run Code Online (Sandbox Code Playgroud)
每一次射击都在正确的位置进行,然后被扔到另一个盒子上,并在其物理体上施加力作为脉冲。
对于触摸实现,我使用 touchesBegan 来搜索触摸,然后如果触摸具有 hitResult,我将按上述方式开火。
问题发生在:如果例如 shot1 击中 boxNode2,boxNode2 会按我的预期向后移动,这次如果我用 boxNode2 射击,shot2 的起始位置不在我预期的 boxNode2 的新位置,并且开始在开始的地方开火!
那么我怎样才能从 boxNodes 的新位置开火呢?