我有一个精灵,用户可以通过按屏幕的左侧或右侧左右移动。如果按住任一侧,播放器精灵将离开屏幕。我想阻止使用物理机构发生这种情况,但我似乎无法使其发挥作用。
首先,这是我的类别。
//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方法?我是否正确设置了物理?如何才能让玩家在移动时不允许离开屏幕?
谢谢
编辑:因此,当物理边界可见时,看起来场景的边界仅在顶部和底部绘制。我看不到两侧有任何线条。这可能是个问题,但我不能让它显示在各方面。
答案 0 :(得分:0)
我通过更改动态值解决了我的问题。我都设置为false,这导致不调用didBegin函数。至少有一个节点需要是动态的。