【发布时间】:2018-05-07 02:36:42
【问题描述】:
我有一个精灵,用户可以通过按下屏幕的左侧或右侧来左右移动。如果您按住任一侧,播放器精灵将离开屏幕。我想用物理来阻止这种情况发生,但我似乎无法让它发挥作用。
首先,这是我的类别。
//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 方法?我的物理设置是否正确?我怎样才能让它在移动时不允许玩家离开屏幕?
谢谢
编辑:因此,当物理边界可见时,看起来场景的边界仅绘制在顶部和底部。我看不到侧面有任何线条。这可能是问题所在,但我无法让它显示在侧面。
【问题讨论】:
-
所以你使用 touchmoved 移动精灵?
-
如何创建场景?它是在场景编辑器中创建的吗?你能显示你转换到场景的代码吗(可能来自 GameViewController)
-
@RonMyschuk 是的,场景已创建,并在 GameViewController 中进行了转换。我发布的代码在 GameScene.swift 中。
标签: swift xcode sprite-kit skphysicsbody