Swift 如何像轮子一样旋转物体

Swift 如何像轮子一样旋转物体,swift,sprite-kit,skphysicsbody,Swift,Sprite Kit,Skphysicsbody,我的目标是旋转一个圆形节点,就像一个由电机驱动的轮子,例如,当顺时针旋转时,由于地板的摩擦,轮子将向右移动 根据其他线程,旋转SKPhysicsBody的方法是旋转它所连接的主体 此代码旋转精灵,但不旋转physicsbody。我如何解决这个问题 let circle = SKSpriteNode(imageNamed: ”circle") circle.position = CGPoint(x: size.width * 0.5, y: size.height * 0.9) circle.ph

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

根据其他线程,旋转SKPhysicsBody的方法是旋转它所连接的主体

此代码旋转精灵,但不旋转physicsbody。我如何解决这个问题

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)
注:这种创建身体的方式在iOS 13中不起作用,但不应影响结果

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

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

当直接移动或旋转精灵时,也会移动物理体,物理引擎会为您移动精灵,这样您就不必担心了。其理念是让它完成工作,而不是直接添加动作来创建动作

如果你想让一个附体的精灵旋转,可以对身体应用一个角度脉冲(如Knight0fDragon所建议的),或者直接设置物理身体的角度速度。如果不希望停止旋转,可能还需要将angularDamping设置为0。例如:

。。。
addChild(圆)
圆.physicsBody?.angularDamping=0
圆.physicsBody?.angularVelocity=.pi
...

然后移除圆圈。运行(…)看看会发生什么。

大家好,欢迎来到SO。为什么你说物理体不旋转,因为它是一个圆,你怎么知道它是否旋转?如果你希望精灵像轮子一样自动移动,那么它不会-你必须计算PB圆周上一点的速度,然后自己移动精灵。嗨。谢谢你的回复。我已经在场景周围创建了一个基于边的实体。圆圈下降到底部并反弹,然后停止。我的目标是使地板摩擦,使其因旋转而移动(使用此信息编辑问题)。也许这不是雪碧套件的工作原理?好的。那么,有可能做到这一点吗(沿着地板和其他物体滚动一个物体)?好的,但我如何作为一个连续的运动做到这一点呢?从实际工作物理学的角度考虑。。。汽车是怎样运动的?它持续施加力来旋转车轮。