作为SKTexture的物理体不会旋转

时间:2016-03-05 21:40:03

标签: xcode swift sprite xcode7 physics

我正在制作主角旋转的游戏,但是,我想使用SKTexture为角色精灵节点设置自定义边界。但是,当我这样做时,我的角色不会旋转。当我使用常规circleOfRadius时(因为我的精灵是圆形的,但没有完美的圆形),它会旋转,但在碰撞时不准确。这是我的代码:

    var mainSpriteTexture = SKTexture(imageNamed: "Main")
    mainSprite = SKSpriteNode(texture: mainSpriteTexture)
    mainSprite.setScale(0.2)
    mainSprite.position = CGPoint(x: self.frame.width / 2, y: 100)


    mainSprite.physicsBody = SKPhysicsBody(texture: mainSpriteTexture, size: mainSprite.size)
    mainSprite.physicsBody?.categoryBitMask = PhysicsCatagory.player
    mainSprite.physicsBody?.collisionBitMask = PhysicsCatagory.platform | PhysicsCatagory.ground
    mainSprite.physicsBody?.contactTestBitMask = PhysicsCatagory.platform | PhysicsCatagory.ground | PhysicsCatagory.score
    mainSprite.physicsBody?.affectedByGravity = true
    mainSprite.physicsBody?.dynamic = true
    mainSprite.physicsBody?.allowsRotation = true
    self.addChild(mainSprite)


override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */
    updateSpritePosition()
    if gameStarted == true {
        if died == false {
            mainSprite.physicsBody?.velocity = CGVectorMake(direction, (mainSprite.physicsBody?.velocity.dy)!)
        }
        else if died == true {
            mainSprite.physicsBody?.velocity = CGVectorMake(0, (mainSprite.physicsBody?.velocity.dy)!)
        }
    }

以下是我正在使用的形状:http://imgur.com/JCeEAbv

1 个答案:

答案 0 :(得分:0)

不确定如何旋转精灵或移动精灵,但是如果我给它一个默认的旋转并将其放在曲面上,它会为我旋转(我使用了你提供的图片)。这样,它就不会完美地落在地面上(zRotation 0.0)。

尝试使用它:

mainSprite.zRotation = 0.1 //note that these are radians

将其放在平坦的表面上。

你可以通过施加一个小的力或冲动来实现同样的事情,它会影响精灵的zRotation属性......你要使用的是什么,取决于你实际上如何移动你的节点 - 使用物理,或者直接更改其位置属性(请参阅我关于混合物理和手动节点移动的注释以获取重要细节)。