停止SKSpriteNode离开视图(Swift)

时间:2014-10-09 17:01:01

标签: ios iphone xcode swift sprite-kit

您好我想阻止SKSpriteNode离开屏幕或让节点在到达屏幕边框时反弹。当它碰到边界时是否也可以调用函数?

如果发现此问题Click

他使用此代码:

let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
self.physicsBody = borderBody
borderBody.friction = 0.0
borderBody.restitution = 1.0

但由于某种原因,它只会阻止我的Node(这是动态的)移出顶部和僵尸,但它能够移出一边。

(请记住,我是SpriteKit和Swift的新手)

编辑:我找到了这段代码:

extension GameScene: SKPhysicsContactDelegate {
    func didBeginContact(contact: SKPhysicsContact!) {
        let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask

        switch (contactMask) {
        case BodyType.pipe.toRaw() |  BodyType.bomb.toRaw():
            println("Contact with a bomb")
            if contact.bodyA.categoryBitMask == BodyType.pipe.toRaw() {
                explode(pipe: contact.bodyA.node as SKSpriteNode)
            } else {
                explode(pipe: contact.bodyB.node as SKSpriteNode)
            }
        case BodyType.pipe.toRaw() |  BodyType.bird.toRaw():
            println("Contact with a pipe")
            bird.pushDown()
        case BodyType.ground.toRaw() | BodyType.bird.toRaw():
            println("Contact with ground")
            for actor in actors {
                actor.stop()
            }

            let shakeAction = SKAction.shake(0.1, amplitudeX: 20)
            screenNode.runAction(shakeAction)
        default:
            return
        }

    }

我读过它就像设置类别一样?这段代码好不好?

2 个答案:

答案 0 :(得分:1)

将物理主体设置为屏幕大小

self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)

答案 1 :(得分:0)

是的,这是可能的。

  • 你必须设置一个带有rect类型的物理主体的SKNode,并给它大小为self.size。这将为屏幕边框创建一个物理主体。

  • 然后你必须在上面SKNode的物理主体上设置一个categorybitmask。这是我们识别物理机构的一种方式。

  • 然后你必须给上面的SKNode一个碰撞位掩码,它等于你不想离开屏幕的节点的类别位掩码。这将使节点崩溃到边框并重新弹回。

  • 最后,如果将contacttestbitmask设置为另一个的categorybitmask。苹果函数“didBeginContact”将会运行,你可以在那里做点什么。

希望有所帮助!