【问题标题】:How to rotate a SKPhysicsBody like a wheel如何像轮子一样旋转 SKPhysicsBody
【发布时间】:2019-10-24 06:20:25
【问题描述】:

我的目标是像由电机驱动的轮子一样旋转圆形节点,例如顺时针旋转时,由于地板的摩擦,轮子会向右移动。

根据其他线程,旋转 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。这种创建 body 的方式在 iOS 13 中不起作用,但应该不会影响结果。

circle.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: ”circle"), size: circle.size)

【问题讨论】:

  • 您好,欢迎来到 SO。你为什么说物理物体不旋转,因为它是一个圆,你怎么知道它是否在旋转?如果您希望精灵像轮子一样自动移动,那么它不会 - 您必须计算 PB 圆周上一个点的速度并自己移动精灵。
  • 嗨。谢谢回复。我在场景周围创建了一个基于边缘的主体。圆圈落到底部并在停止之前反弹。我的目标是摩擦地板使其因旋转而移动(使用此信息编辑问题)。也许这不是 Sprite 套件的工作原理?
  • 好的。那么有可能做到这一点(沿着地板和其他物体滚动身体)吗?

标签: swift sprite-kit skphysicsbody


【解决方案1】:

虽然直接移动或旋转精灵也会移动物理主体,但物理引擎会为您移动精灵,因此您不必担心。其理念是让它完成工作,而不是直接添加动作来创建动作。

如果你想让一个附有身体的精灵旋转,要么对身体施加一个角脉冲(如 Knight0fDragon 所建议的),要么直接设置物理身体的 angularVelocity。如果您不希望旋转停止,您可能还想将 angularDamping 设置为 0。例如,

...
addChild(circle)
circle.physicsBody?.angularDamping = 0
circle.physicsBody?.angularVelocity = .pi
...

然后删除 circle.run(...) 看看会发生什么。

【讨论】:

    【解决方案2】:

    使用“applyAngularImpulse”,而不是 SKActions。还将“allowsRotation”设置为 true

    【讨论】:

    • 好的,但是我如何将其作为一个连续的动作呢?
    • 从实际工作物理学的角度思考……汽车是如何移动的?它不断地施加力来转动轮子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    相关资源
    最近更新 更多