gpt4 book ai didi

ios - Xcode Swift 游戏(碰撞问题)

转载 作者:行者123 更新时间:2023-11-28 07:08:32 25 4
gpt4 key购买 nike

我试图让一个“方 block ”与“地面”碰撞,而不是让方 block 穿过地面消失!

这是我的 block 代码

        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)

每次我运行它时,如果我将 dynamic 设置为 true,该 block 就会消失。

有什么帮助吗?

最佳答案

您忘记了 physicsBody 碰撞逻辑的一个非常重要的部分:categoryBitMaskcategoryBitMask 属性告诉系统它是什么类型的对象。您基本上是在告诉系统您希望每个对象与什么发生碰撞,但您忘记告诉系统它们实际上是什么类型的对象。

为了进一步说明,仅当您确实希望在两个物体发生碰撞但又不希望它们的物理体相互影响时才需要通知contactTestBitMask。 (想想当马里奥击中一枚硬币时。他不会弹开它,但是当您更新硬币计数时,您需要收到上述碰撞的通知)。 collisionBitMask 告诉系统实际与哪些物体发生物理碰撞。但此属性需要与 categoryBitMask 配对才能真正起作用。

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

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

希望对您有所帮助!

关于ios - Xcode Swift 游戏(碰撞问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29498112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com