【问题标题】:SKSpriteNodes bounce off of each other when they should check if touchingSKSpriteNode 在应该检查是否接触时相互反弹
【发布时间】:2018-02-18 21:08:54
【问题描述】:

我希望我的代码能够检查两个 SKSpriteNode(purplePentagonpurpleGoal)何时接触,但是,有时如果节点运行得足够快,它就会像其他任何节点一样反弹.

这是我在 GameScene.swift 中 update() 函数中的代码

if(purplePentagon?.physicsBody?.allContactedBodies().contains((purpleGoal?.physicsBody)!))! {
    purplePentagon?.isHidden = true
    purplePentagon?.physicsBody?.isDynamic = false
    purpleScored = true
}

如果purplePentagon 没有那么快,它运行良好,但如果它很快就会反弹。

【问题讨论】:

  • 你真的应该为这类问题包含更多代码,例如对象physicsBodies是如何设置它们的collisionBitMasks是什么以及他们的contactBitMasks是什么
  • 听起来你没有正确定义contactTestBitMask和collisionBitMask。

标签: swift sprite-kit skphysicsbody


【解决方案1】:

你为什么要检查更新中的物理联系人? vs 使用内置物理函数

func didBeginContact(contact: SKPhysicsContact)?

您可能已将碰撞位掩码设置为彼此以及接触位掩码

self.physicsBody?.contactTestBitMask = PhysicsCategory.goal
self.physicsBody?.collisionBitMask = PhysicsCategory.obstacle

如果您不希望它们相互反弹,请确保physicsBody 的collisionBitMask 属性不包含其他对象。但请保持contactTestBitMask 相互设置,以便您可以检测到它们何时发生碰撞。

编辑多个实例

self.physicsBody?.contactTestBitMask = PhysicsCategory.goal1 | PhysicsCategory.goal2 | PhysicsCategory.goal3

【讨论】:

  • 如果这解决了您的问题,请确保将其标记为正确答案,以便其他人可以从您的问题中受益
  • 嗨对不起,已经有一段时间了,但是我在设置 categoryBitMask 和 collisionBitMask 时遇到了问题,我之前没有意识到......在我的游戏中,我需要在场景中使用 SKSpriteNodes时间,他们每个人都有一个节点,这是他们的目标。每个节点都应该能够与除目标之外的所有东西发生碰撞,但由于碰撞位掩码只是一个整数,我完全不确定如何做到这一点。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2022-01-25
相关资源
最近更新 更多