Xcode Swift游戏(碰撞问题)

时间:2015-04-07 18:01:25

标签: ios xcode swift xcode6

我试图让“阻挡”与“地面”发生碰撞,而不是挡住地面并消失!

这是我的代码

        hero = CSHero()
    hero.position = CGPointMake(70, movingGround.position.y + movingGround.frame.size.height/2 + hero.frame.size.height/2)
    hero.physicsBody = SKPhysicsBody(rectangleOfSize: hero.size)
    hero.physicsBody?.dynamic = true
    hero.physicsBody?.contactTestBitMask = heroCategory | groundCategory
    hero.physicsBody?.collisionBitMask = heroCategory | groundCategory
    addChild(hero)

这是我的地面守则

        let ground1 = SKSpriteNode(color: UIColor.blackColor(), size: CGSizeMake(view.frame.size.width, 15))
    ground1.position = view.center
    ground1.physicsBody = SKPhysicsBody(rectangleOfSize: ground1.size)
    ground1.physicsBody!.dynamic = false
    ground1.physicsBody!.contactTestBitMask = groundCategory | heroCategory
    ground1.physicsBody!.collisionBitMask = groundCategory | heroCategory
    addChild(ground1)

每次运行它时,如果我将动态设置为true,那么块就会消失。

任何帮助?

1 个答案:

答案 0 :(得分:1)

你忘记了物理碰撞逻辑的一个非常重要的部分:categoryBitMaskcategoryBitMask属性告诉系统它是什么类型的对象。您实际上是告诉系统您希望每个对象与之碰撞但您忘记告诉系统它们实际上是什么类型的对象。

为了进一步说明,只有当你确实想要在两件事发生碰撞但不希望他们的物理机构相互作用时得到通知时才需要contactTestBitMask。 (想想当马里奥击中一枚硬币的时候。他没有弹出它,但你需要在更新硬币计数时收到有关所述碰撞的通知)。 collisionBitMask告诉系统实际物理碰撞的物体。但是这个属性需要与categoryBitMask配对才能真正发挥作用。

现在,您拥有所需的一切。不需要Dynamic。您需要做的是添加以下两行代码:

ground1.physicsBody?.categoryBitMask = groundCategory
hero.physicsBody?.categoryBitMask = heroCategory

我希望这有帮助!