gpt4 book ai didi

swift - SKPhysicsBody( body : collisionBitMask does not work

转载 作者:行者123 更新时间:2023-11-28 06:18:07 27 4
gpt4 key购买 nike

我遇到需要为单个纹理创建两个 SKPhysicsBody 的情况,因为碰撞响应需要不同

 let leftBigBox = SKPhysicsBody(rectangleOf :CGSize(width: 490, height: 90) , center:bCenterPoint )

leftBigBox.contactTestBitMask = category_kitty
leftBigBox.categoryBitMask = category_train
leftBigBox.collisionBitMask = category_kitty | category_track

let rightSmallBox = SKPhysicsBody(rectangleOf :CGSize(width: 100, height: 45) , center:sCenterPoint )
rightSmallBox.categoryBitMask = category_wagon
rightSmallBox.collisionBitMask = category_kitty | category_track
rightSmallBox.contactTestBitMask = category_kitty

physicsBody=SKPhysicsBody(bodies: [leftBigBox,rightSmallBox])

但是 didBegin(_ contact: SKPhysicsContact) 没有检测到我的小猫何时击中了子节点。我可以看到它正在发生的 Debug模式,但委托(delegate)不会打印,如果我指定 collisionBitMaskcontactTestBitMask 为父 physicsBody 它工作,但我的目标是 split 他们一分为二* 我尝试使用关节和两种不同的纹理,性能太差了

这些是小猫的值(value)观

 physicsBody!.categoryBitMask = category_kitty
physicsBody!.contactTestBitMask = category_wagon | category_border | category_train
physicsBody!.collisionBitMask = category_border | category_wagon | category_train

最佳答案

根据 Apple:https://developer.apple.com/documentation/spritekit/skphysicsbody/1519736-init

"The properties on the children, such as mass or friction, are ignored. Only the shapes of the child bodies are used."

这意味着当您通过以下方式创建新的 physicsBody 时,您在 2 个单独的物理体上设置的位掩码不会保留:

physicsBody=SKPhysicsBody(bodies: [leftBigBox,rightSmallBox])

(正如 KnightOfdragon 所说,它仅使用数组中物理体的形状来创建新物理体的形状。然后您必须设置新物理体的所有属性 - 无使用了被连接物体的属性)。

所以你最好用某种关节连接 2 个物理体(如果你不知道如何做,问一个新问题)或者使用其他方法来确定你的对象的哪一部分有有点被小猫撞了。

关于swift - SKPhysicsBody( body : collisionBitMask does not work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44516374/

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