SpriteKit SKPhysics联系问题

Posted

技术标签:

【中文标题】SpriteKit SKPhysics联系问题【英文标题】:SpriteKit SKPhysicsContact Issue 【发布时间】:2020-02-22 23:51:16 【问题描述】:

在我正在制作的游戏中,我遇到了一个问题,当我的玩家和硬币相互接触时,它们发生碰撞,然后硬币立即滚落,然后从游戏场景中删除。我希望它的工作方式是当硬币与我的玩家发生碰撞时,它会算作 1 分,并且在他们接触时让硬币自行删除。这是我到目前为止的代码

【问题讨论】:

将冲突位掩码设置为 0。如果您没有收到联系通知,请确保您已设置 physicsWorld.contactDelegate。另外,我看不到您在哪里设置节点名称,所以可能正在发生联系而您只是错过了它,因为排序和/或检查名称是错误的。 @bg2b 我在游戏场景中设置了我的玩家和背景精灵节点,我的硬币在 objc 函数中,但这可能与它有关吗? 应该没关系。您可以在场景中打开showsPhysics 以查看物理体,您可以在didBegin 中设置断点以确保它被调用。如果不是,则可能的问题是physicsWorld.contactDelegate 未设置,两个主体都将isDynamic 设置为false(至少一个必须是true 才能标记冲突),或者类别/位掩码错误。 你的播放器有名字吗?我猜你的联系人没有工作,因为你没有任何玩家的名字,所以碰撞代码开始了。 @Knight0fDragon 我只是添加了玩家名称我之前没有这样做是我犯了一个错误但硬币仍然没有从玩家中删除,此时我很困惑,我什至换成使用枚举和物理案例,但我得到了相同的结果 【参考方案1】:

保持代码对齐并注意大小写非常重要,因为 swift 区分大小写。

此代码中的错误是 player 缺少名称,touchesMoved 末尾缺少大括号,并且 didBegin 全部小写。

希望这将是代码管理方面的一课。

【讨论】:

我能问你最后一个问题吗?我为打扰你感到难过,但最后一件事我需要帮助

以上是关于SpriteKit SKPhysics联系问题的主要内容,如果未能解决你的问题,请参考以下文章

具有相同 SKPhysics 身体对象的多个精灵

SpriteKit 动画物理

在 SpriteKit 中为弹跳球创建音效

为什么我的联系人识别器不起作用

SpriteKit:无法在联系人回调中更改节点位置

SpriteKit(Swift)敌人没有被删除/敌人和子弹似乎没有联系