ios - didBeginContact 未被调用

标签 ios swift sprite-kit skspritenode skphysicsbody

我有 2 个 SKSpriteNode,需要检测其接触。我尝试了各种方法并查找了很多东西,但似乎无法得到答案。下面是我的代码。 controlCircle 是一个类级别变量,因为它需要在其他方法中使用。对象生成得很好。

class GameScene: SKScene, SKPhysicsContactDelegate {

var controlCircle = SKSpriteNode()
var mainCategory : UInt32 = 1 << 0
var dropCategory: UInt32 = 1 << 1



override func didMoveToView(view: SKView) {

    self.physicsWorld.contactDelegate = self
    self.physicsWorld.gravity = CGVectorMake(0,0)

    //CREATING FIRST OBJECT AND ADDING PHYSICS BODY
    var mainRadius = 20.0;
    var controlCircle = SKSpriteNode(color: UIColor.clearColor(), size:CGSizeMake(mainRadius    * 2, mainRadius * 2))

    var circleBody = SKPhysicsBody(circleOfRadius: mainRadius)
    circleBody.dynamic = false
    circleBody.usesPreciseCollisionDetection = true

    controlCircle.physicsBody = circleBody

    var bodyPath = CGPathCreateWithEllipseInRect(CGRectMake((controlCircle.size.width/2),   controlCircle.size.height/2, controlCircle.size.width, controlCircle.size.width),
        nil)

    var circleShape = SKShapeNode()
    circleShape.fillColor = UIColor.brownColor()
    circleShape.lineWidth = 0
    circleShape.path = bodyPath
    controlCircle.addChild(circleShape)
    controlCircle.position = CGPointMake(self.frame.width/2, self.frame.height/2)

    self.addChild(controlCircle)
    controlCircle.physicsBody.categoryBitMask = mainCategory
    controlCircle.physicsBody.contactTestBitMask = dropCategory


    //CREATING SECOND OBJECT AND ADDING PHYSICS BODY 
    var radius = 10.0;
    var drop = SKSpriteNode(color: UIColor.clearColor(), size:CGSizeMake(radius * 2, radius * 2))

    var dropBody = SKPhysicsBody(circleOfRadius: radius)
    dropBody.dynamic = false
    dropBody.usesPreciseCollisionDetection = true

    drop.physicsBody = dropBody

    var dropPath = CGPathCreateWithEllipseInRect(CGRectMake((drop.size.width/2), drop.size.height/2, drop.size.width, drop.size.width),
        nil)

    var dropShape = SKShapeNode()
    dropShape.fillColor = UIColor.blackColor()
    dropShape.lineWidth = 0

    drop.name = "dropMask"
    dropShape.path = dropPath


    drop.addChild(dropShape)
    drop.position = CGPointMake(CGFloat(xValue), self.frame.height-5)

    self.addChild(drop)
    drop.physicsBody.categoryBitMask = dropCategory
    drop.physicsBody.contactTestBitMask = mainCategory
}

    func didBeginContact(contact: SKPhysicsContact) -> Void{
    NSLog("Hello")

    }
}

最佳答案

大家好消息

SKPhysicsBody 文档:

动态属性控制基于体积的实体是否受到重力、摩擦力、与其他对象的碰撞以及直接施加到对象的力或冲量的影响。

因此,这里有一个想法,即在不拖动时实现静止对象,但接收碰撞事件。在 SKSpriteNode 上的 TouchBegan 上,设置其 physicalsBody.dynamic = true,在 touchUp 上设置其 physicalsBody.dynamic = false

或者,您可以从系统中移除重力,并使所有节点都具有 physicalsBody.dynamic = true

关于ios - didBeginContact 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25007037/

相关文章:

ios - 使用 XCUITest 设置 UI 自动化测试的可访问性标识符

ios - 可以在数组中添加一些填充吗?

sprite-kit - 有没有办法在 SpriteKit 中创建凹面物理体?

swift - 我可以在 Swift 的 guard 语句中使用范围运算符吗?

ios - 通过单击单元格中的取消按钮来删除该单元格,也可以通过 editActionsForRowAt 方法删除该单元格

ios - 如何实现SKActionTimingFunction?

IOS Sprite 套件,旋转一个SKSpriteNode

ios - XCode5 assets目录的切片工具如何使用切片的图片

ios - 使用两个 NSSortDescriptor 来过滤数组

ios - 从单独的 UIViewController 切换 UITabBarController 选项卡