如何像轮子一样旋转 SKPhysicsBody
How to rotate a SKPhysicsBody like a wheel
我的目标是像电机驱动的轮子一样旋转圆形节点,例如顺时针旋转时,由于地板的摩擦力,轮子会向右移动。
根据其他线程,旋转 SKPhysicsBody 的方法是旋转它所连接的主体。
此代码旋转精灵而不是物理体。我该如何解决这个问题?
let circle = SKSpriteNode(imageNamed: ”circle")
circle.position = CGPoint(x: size.width * 0.5, y: size.height * 0.9)
circle.physicsBody = SKPhysicsBody(circleOfRadius: circle.frame.width/2)
if let physics = circle.physicsBody {
physics.affectedByGravity = true
physics.allowsRotation = true
physics.restitution = 0.2
physics.friction = 1.0
physics.isDynamic = true;
physics.mass = 10
}
addChild(circle)
let rotateAction = SKAction.rotate(byAngle: .pi, duration: 1.0)
let repeatAction = SKAction.repeatForever(rotateAction)
circle.run(repeatAction)
PS。这种创建正文的方法在 iOS 13 中不起作用,但应该不会影响结果。
circle.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: ”circle"), size: circle.size)
使用“applyAngularImpulse”,而不是 SKActions。同时将“allowsRotation”设置为 true
虽然直接移动或旋转 sprite 也会移动物理 body,但物理引擎可以为您移动 sprite,因此您不必担心。理念是让它完成工作,而不是添加动作来直接创建动作。
如果你想要一个附有 body 的精灵旋转,要么对 body 应用 angular 脉冲(如 Knight0fDragon 所建议),要么只设置物理 body的angular速度直接。如果您不想停止旋转,您可能还想将 angularDamping 设置为 0。例如,
...
addChild(circle)
circle.physicsBody?.angularDamping = 0
circle.physicsBody?.angularVelocity = .pi
...
然后删除 circle.run(...) 看看会发生什么。
我的目标是像电机驱动的轮子一样旋转圆形节点,例如顺时针旋转时,由于地板的摩擦力,轮子会向右移动。
根据其他线程,旋转 SKPhysicsBody 的方法是旋转它所连接的主体。
此代码旋转精灵而不是物理体。我该如何解决这个问题?
let circle = SKSpriteNode(imageNamed: ”circle")
circle.position = CGPoint(x: size.width * 0.5, y: size.height * 0.9)
circle.physicsBody = SKPhysicsBody(circleOfRadius: circle.frame.width/2)
if let physics = circle.physicsBody {
physics.affectedByGravity = true
physics.allowsRotation = true
physics.restitution = 0.2
physics.friction = 1.0
physics.isDynamic = true;
physics.mass = 10
}
addChild(circle)
let rotateAction = SKAction.rotate(byAngle: .pi, duration: 1.0)
let repeatAction = SKAction.repeatForever(rotateAction)
circle.run(repeatAction)
PS。这种创建正文的方法在 iOS 13 中不起作用,但应该不会影响结果。
circle.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: ”circle"), size: circle.size)
使用“applyAngularImpulse”,而不是 SKActions。同时将“allowsRotation”设置为 true
虽然直接移动或旋转 sprite 也会移动物理 body,但物理引擎可以为您移动 sprite,因此您不必担心。理念是让它完成工作,而不是添加动作来直接创建动作。
如果你想要一个附有 body 的精灵旋转,要么对 body 应用 angular 脉冲(如 Knight0fDragon 所建议),要么只设置物理 body的angular速度直接。如果您不想停止旋转,您可能还想将 angularDamping 设置为 0。例如,
...
addChild(circle)
circle.physicsBody?.angularDamping = 0
circle.physicsBody?.angularVelocity = .pi
...
然后删除 circle.run(...) 看看会发生什么。