【问题标题】:Stop sprite from leaving screen using physics bodies使用物理实体阻止精灵离开屏幕
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多