swift - 当我不想时,SKShapeNodes 与我的 SKPhysics 身体发生碰撞
问题描述
我正在制作一个游戏,其中我有一个创建为 SKSpriteNode 的球,它与一些我不想发生的 PhysicsBodies 发生碰撞。这是我的球:
orangeBall = OrangeBall(path: ballTrajectory, color: UIColor.orange, borderColor: UIColor.black)
orangeBall.physicsBody = SKPhysicsBody(circleOfRadius: Physics.PhysicsNumbers.ballRadius)
orangeBall.position = Physics.PhysicsNumbers.ballRestPos
orangeBall.physicsBody?.categoryBitMask = CollisionsChecker.Ball
orangeBall.physicsBody?.collisionBitMask = CollisionsChecker.Frame | CollisionsChecker.Box | CollisionsChecker.Score
orangeBall.physicsBody?.contactTestBitMask = CollisionsChecker.Frame | CollisionsChecker.Box | CollisionsChecker.Score
orangeBall.physicsBody?.isDynamic = false
orangeBall.physicsBody?.affectedByGravity = false
addChild(orangeBall)
我希望它检测到它已经与这个分数物理体接触但实际上没有碰撞:
score = NetBoxes(path: scoreStationary, color: UIColor.red, borderColor: UIColor.red)
score.position = Physics.PhysicsNumbers.scoreRest
score.physicsBody = SKPhysicsBody(circleOfRadius: 50)
score.physicsBody?.categoryBitMask = CollisionsChecker.Score
score.physicsBody?.contactTestBitMask = 0
score.physicsBody?.collisionBitMask = CollisionsChecker.Ball
score.physicsBody?.affectedByGravity = false
score.physicsBody?.isDynamic = false
addChild(score)
(circleOfRadius 仅用于测试目的)每次我尝试检查我的碰撞时,它似乎都没有输出我想要它做的事情:
func didBegin(_ contact: SKPhysicsContact){
let firstBody = contact.bodyA
let secondBody = contact.bodyB
if firstBody.categoryBitMask == CollisionsChecker.Ball && secondBody.categoryBitMask == CollisionsChecker.Score || firstBody.categoryBitMask == CollisionsChecker.Score && secondBody.categoryBitMask == CollisionsChecker.Ball{
print("Ball in hoop")
}
本质上,我作为 SKSphapeNode 的 orangeBall 总是与我的 Score PhysicsBody 发生碰撞。也可能是我的球和得分周围的两个物理体接触。我很茫然,任何帮助将不胜感激!
解决方案
我已经想通了。我稍后在代码中为我的 orangeBall 重新创建了一个物理体。在它周围形成另一个physicsBody,使其与我的其他节点发生碰撞!
推荐阅读
- html - 当particle.js库将画布附加到同一元素时,将元素居中在div中?
- reactjs - 异步任务和订阅时 ReactJS 内存泄漏
- javascript - nodejs:如何获取中间哈希值
- node.js - 使用批处理安装和配置 Protractor
- spring - 如何在 Spring Security preauthentication for siteminder 中验证 SM_USER 标头
- assertj - 来自 assertJ 的方法 anySatisfy 吞下实际的失败消息
- vba - 如何删除书签后插入的文本,以便我可以插入新文本
- perl - 是否可以优雅地重启 Mojolicious Minion 工人?
- r - 在 R 中绘制内核的累积分布函数
- java - Hibernate 中具有基于实体属性的动态前缀的标识符