Ken*_*del 3 game-physics ios sprite-kit skphysicsbody swift
我目前正在开发一款具有圆柱物体图片的游戏,并使用以下内容制作了SKPhysicsBody:
self.oval.node.physicsBody = SKPhysicsBody(texture: self.oval.node.texture, size: self.oval.node.size)
Run Code Online (Sandbox Code Playgroud)
该方法在节点周围创建了一个不错的形状,但是重心偏离了...它在椭圆形的顶端保持平衡。无论如何,有什么需要改变的地方,以便平衡理论上最重的部分在哪里?谢谢!
的确,质心不能偏离。问题是您希望物理物体的密度不均匀。刚性物理物体的密度始终是均匀的。除了修改物理实体本身(即更改物理实体的大小/形状)外,我没有其他方法可以做到。
即使您尝试使用多个物理物体的并集来创建物理物体,其SKPhysicsBody(bodies: [body1,body2])密度仍将是统一的,因为Sprite Kit仍会将其模拟为一个物体。
我能想到的唯一解决方案是使用接头将2个锯齿融合在一起,如下所示。
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let node1 = SKShapeNode(circleOfRadius: 20)
node1.physicsBody = SKPhysicsBody(circleOfRadius: 20)
node1.position = CGPoint(x: self.size.width/2.0, y: self.size.height/2.0)
let node2 = SKShapeNode(circleOfRadius: 2)
node2.physicsBody = SKPhysicsBody(circleOfRadius: 1)
node2.position = CGPoint(x: self.size.width/2.0, y: self.size.height/2.0+19)
node2.physicsBody!.mass = node1.physicsBody!.mass * 0.2 //Set body2 mass as a ratio of body1 mass.
self.addChild(node1)
self.addChild(node2)
let joint = SKPhysicsJointFixed.jointWithBodyA(node1.physicsBody!, bodyB: node2.physicsBody!, anchor: node1.position)
self.physicsWorld.addJoint(joint)
self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
node1.physicsBody!.applyImpulse(CGVector(dx: -10, dy: 0))
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这不能解决圆弧完美居中的特殊情况。您会看到我冲动性地暂时解决了上面代码中的问题。更好的解决方案是在更新方法中检查这种特殊情况。
| 归档时间: |
|
| 查看次数: |
696 次 |
| 最近记录: |