使用物理实体

时间:2018-05-07 02:36:43

标签: swift xcode sprite-kit skphysicsbody

我有一个精灵,用户可以通过按屏幕的左侧或右侧左右移动。如果按住任一侧,播放器精灵将离开屏幕。我想阻止使用物理机构发生这种情况,但我似乎无法使其发挥作用。

首先,这是我的类别。

//Categories for physics bodies
let sceneCategory:UInt32   = 0x1 << 0 // Equal to 1
let playerCategory:UInt32 = 0x1 << 1 // Equal to 2

这里是我设置场景本身的物理主体的地方。

self.physicsWorld.contactDelegate = self
self.physicsBody = SKPhysicsBody(edgeLoopFrom: self.frame)
self.physicsBody?.categoryBitMask = sceneCategory
self.physicsBody?.contactTestBitMask = playerCategory
self.physicsBody?.collisionBitMask = 0
self.physicsBody?.isDynamic = false

这就是我为玩家本身设置物理的方法。我正试图在汽车周围设置物理机构。我的设置方式与设置alpha蒙版物理体相同吗?

let texture = SKTexture(imageNamed: "PorscheBlue")
player.physicsBody = SKPhysicsBody(texture: texture, size: player.size)
player.physicsBody?.isDynamic = false
player.physicsBody?.categoryBitMask = playerCategory
player.physicsBody?.contactTestBitMask = sceneCategory
player.physicsBody?.collisionBitMask = 0

然后,在didBegin方法中,我只是希望它打印显示该方法被调用。出于某种原因,这种情况并没有发生。

func didBegin(_ contact: SKPhysicsContact)
{
    print("called")
}

为什么不调用didBegin方法?我是否正确设置了物理?如何才能让玩家在移动时不允许离开屏幕?

谢谢

编辑:因此,当物理边界可见时,看起来场景的边界仅在顶部和底部绘制。我看不到两侧有任何线条。这可能是个问题,但我不能让它显示在各方面。

1 个答案:

答案 0 :(得分:0)

我通过更改动态值解决了我的问题。我都设置为false,这导致不调用didBegin函数。至少有一个节点需要是动态的。