阻止 Sprite 在 SpriteKit 中相互推动

Posted

技术标签:

【中文标题】阻止 Sprite 在 SpriteKit 中相互推动【英文标题】:Stop Sprites from Pushing Each Other in SpriteKit 【发布时间】:2015-06-30 20:59:43 【问题描述】:

我正在编写一个 SpriteKit 游戏,我正在尝试添加相当于 Cocos2D 传感器的功能。我的问题是我的传感器一直在推动其他精灵,但这不是我想要的。我希望传感器能够与其他精灵重叠而不是推动它们。我该如何解决?这是我为传感器添加的代码:

bubble.physicsBody = SKPhysicsBody(circleOfRadius: CGFloat(50))
bubble.physicsBody?.dynamic = false
bubble.physicsBody?.allowsRotation = false
bubble.physicsBody?.affectedByGravity = false

这是我的碰撞方法:

func didBeginContact(contact: SKPhysicsContact) 
    let collision:UInt32 = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask)

    if collision == (playerCategory | crateCategory) 
        NSLog("Game Over")
        var myLabel = SKLabelNode(fontNamed: "Arial")
        myLabel.text = "GAME OVER"
        myLabel.fontSize = 50
        myLabel.color = SKColor.blueColor()
        myLabel.position = (CGPointMake(self.frame.size.width*0.5, self.frame.size.height*0.5))
        self.addChild(myLabel)
        fisherman.physicsBody?.dynamic = false
        fisherman.removeFromParent()
        fish.physicsBody?.dynamic = false
        fish.removeFromParent()
        crate.physicsBody?.dynamic = false
        crate.removeFromParent()
        crateDuplicate.physicsBody?.dynamic = false
        crateDuplicate.removeFromParent()


    
    if collision == (playerCategory | bubbleCategory) 
        NSLog("Bubble Contact")
        bubbleDuplicate.removeAllActions()
        bubbleDuplicate.removeFromParent()
        bubble.removeAllActions()
        bubble.removeFromParent()
        bubbleDuplicate.setScale(0)
        bubble.setScale(0)
        bubbleDuplicate.alpha = 0


               



【问题讨论】:

【参考方案1】:

collisionBitMask 设置为0,因此该特定对象与其他对象的所有碰撞都将被忽略。

【讨论】:

@kriskendall99 您需要使对象动态化。静态对象仍会影响其他对象的弹跳,但会忽略碰撞位掩码。 您在联系委托中实施了任何其他行为吗?接触仍然应该发生,碰撞不应该发生。您如何验证它仍然无法正常工作? 是的,我实现了其他行为。我添加了一种方法来启用与敌人精灵的碰撞。我知道它不起作用,因为当我运行游戏时,仍然会发生碰撞。我的角色精灵能够跳到应该禁用碰撞的精灵之上。 您也可以发布您的自定义碰撞方法吗?谢谢。 好吧,我添加了这些行 fish.physicsBody?.collisionBitMask = playerCategory | crateCategory fish.physicsBody?.contactTestBitMask = playerCategory | crateCategory 现在不再发生与气泡的碰撞!感谢您的帮助!

以上是关于阻止 Sprite 在 SpriteKit 中相互推动的主要内容,如果未能解决你的问题,请参考以下文章

以一定速度在屏幕上移动对象。(Sprite Kit)

模拟两个 Sprite Kit 节点的万有引力

在Sprite纹理中检测触摸而不是整个框架iOS Swift SpriteKit?

SpriteKit Sprite 无法正确缩放

Sprite Kit 碰撞检测和物理

SpriteKit - 鼠标在 Sprite 拖动时捕捉到中心