Swift SpriteKit - 防止精灵节点角旋转

Posted

技术标签:

【中文标题】Swift SpriteKit - 防止精灵节点角旋转【英文标题】:Swift SpriteKit - Prevent sprite node from angular rotation 【发布时间】:2018-10-10 12:49:28 【问题描述】:

我试图阻止我的精灵旋转。我看过其他一些 *** 答案,但没有任何帮助。当我将精灵移动到另一个节点或靠近物理边界的一侧时,它会旋转它。

这是我在初始化精灵时尝试过的:

        let texture = SKTexture(imageNamed:character.image)
        let size = CGSize(width: character.width, height: character.height)
        player = playerNode
        player.name = "player"
        player.physicsBody?.isDynamic = true
        player.physicsBody?.allowsRotation = false
        player.physicsBody?.angularVelocity = 1
        player.texture = texture
        player.position = CGPoint(x:0, y:0)
        player.size = size

        // Physics
        player.physicsBody?.categoryBitMask = BodyType.player.rawValue
        player.physicsBody?.contactTestBitMask = BodyType.dot.rawValue
        player.physicsBody?.collisionBitMask = 0
        player.physicsBody = SKPhysicsBody(texture: texture, size: size)
        player.physicsBody?.linearDamping = 1
        player.physicsBody?.angularDamping = 1

【问题讨论】:

...老兄,看看你在哪里创建物理体 【参考方案1】:

您的player 实际上并没有物理实体,直到您到达“物理”部分中的这一行:

player.physicsBody = SKPhysicsBody(texture: texture, size: size)

所以所有这些在物理体上设置属性的行都没有做任何事情:

    player.physicsBody?.isDynamic = true
    player.physicsBody?.allowsRotation = false
    player.physicsBody?.angularVelocity = 1

    // Physics
    player.physicsBody?.categoryBitMask = BodyType.player.rawValue
    player.physicsBody?.contactTestBitMask = BodyType.dot.rawValue
    player.physicsBody?.collisionBitMask = 0

将物理体的创建移动到“物理”部分的顶部,然后将所有物理体的属性分配。

【讨论】:

没问题?如果您将物理体属性分配更改为player.physicsbody!,那么您在尝试解开“nil”时会崩溃,这可能更有帮助。其他人建议创建一个单独的物理体,设置所有属性,然后将该物理体分配给您的节点。

以上是关于Swift SpriteKit - 防止精灵节点角旋转的主要内容,如果未能解决你的问题,请参考以下文章

Swift SpriteKit:翻转父精灵随机子节点水平对齐

在我的 swift SpriteKit 游戏中,物理体的轮廓通过所有其他节点显示

Swift 4 SpriteKit:如何防止父节点的 .alpha 属性影响子节点?

如何根据平移手势速度向 Sprite Kit 节点应用角脉冲

Xcode Swift 3 / SpriteKit:点击精灵

Swift - SpriteKit:如果添加不同的“addchild”父母,使精灵相互反应