2

当我更改 GameScene 的 anchorPoint 时,屏幕上(from default 0,0 to 0.5,0.5)的 sprite 的物理体。disappeareddebugging with kView.showsPhysics = true

它仍然存在,因为每艘船都相互碰撞,但看起来physicsBody 的位置发生了偏移(超出屏幕)。

为什么此更改会影响场景子对象的物理体?

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        anchorPoint = CGPointMake(0.5, 0.5)
        physicsWorld.gravity = CGVector(0, 0)
    }

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        for touch: AnyObject in touches {
            let location = touch.locationInNode(self)

            let sprite = SKSpriteNode(imageNamed:"Spaceship")

            sprite.physicsBody = SKPhysicsBody(circleOfRadius: 100)

            sprite.xScale = 0.5
            sprite.yScale = 0.5
            sprite.position = location

            let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1)

            sprite.runAction(SKAction.repeatActionForever(action))

            self.addChild(sprite)
        }
    }
}
4

2 回答 2

0

我做了同样的事情。我将 SKScene 的锚点也放在了中间(CGPointMake(0.5, 0.5)),它完全破坏了物理。您会注意到这一点,尤其是在将关节添加到物理场景时,您将无法将物理关节锚点放置在正确的位置。

我的建议是,如果使用 SKPhysics,请不要更改 SKScene 锚点(花费我大量时间和重写来找出答案)。

于 2014-09-22T17:49:24.657 回答
0

改变场景的锚点不会改变物理世界的坐标。每个节点及其物理体也是如此。使用您自己的节点,您可以使用带有中心的特殊 SKPhysicsBody init 进行补偿:(拥有节点坐标系中的中心)。

对于现在的物理世界,您无能为力。

于 2015-05-22T01:39:06.580 回答