【问题标题】:collisions in swift and spritekitswift和spritekit中的碰撞
【发布时间】:2017-12-14 09:48:41
【问题描述】:

我正在使用SwiftSpritekit 开发一个简单的游戏。

我的场景中有 4 个节点:nodeA1、nodeA2、nodeB1 和 nodeB2。

所以 nodeA1 可以接触到 nodeA2nodeB1 可以接触到 nodeB2

我想要

nodeA2 touch nodeB2 without nodeA1 touch nodeB1 and nodeB2 and nodeB1 是一样的。

这可能吗?

【问题讨论】:

  • 您的意思是碰撞,即您是否希望节点A1 和节点A2 相互反弹,节点B1 和节点B2 也相互反弹,但节点A1 和A2 直接通过节点B1 和B2?或者您的意思是联系人,即您希望在 nodeA1 和 nodeA2 触摸以及 nodeB1 和 nodeB2 触摸时收到通知,但如果 A1 或 A2 触摸 B1 和 B2 您不感兴趣?
  • 嘿@SteveIves(我的意思是碰撞),是的,节点 A1 和 A2 相互反弹,节点 B1 和 B2 相互反弹,以及 重要部分 A2 和 B2互相反弹

标签: ios swift sprite-kit collision


【解决方案1】:

是的,绝对有可能,不管你是说碰撞还是接触?

如果你能澄清这一点,我会告诉你怎么做。 (我可以告诉你两者,但那将是额外的代码。)

编辑 - 此处为所描述的碰撞代码:

  1. 定义独特的类别,确保您的班级是SKPhysicsContactDelegate,并让您自己成为物理联系人代表:

    //物理类 让 nodeA1Category: UInt32 = 1

    类 GameScene: SKScene, SKPhysicsContactDelegate { physicsWorld.contactDelegate = self

  2. 分配类别(通常在didMove(to view:)

    nodeA1.physicsBody.catgeoryBitMask = nodeA1Category nodeA2.physicsBody.catgeoryBitMask = nodeA2Category nodeB1.physicsBody.catgeoryBitMask = nodeB1Category nodeB2.physicsBody.catgeoryBitMask = nodeB2Category

(确保您已为每个节点创建物理体,并将 isDynamic 属性设置为 true

  1. 设置碰撞:

    nodeA1.physicsBody?.collisionBitMask = nodeA2Category // A1 与 A2 碰撞 nodeA2.physicsBody?.collisionBitMask = nodeA1Category // A2 与 A1 碰撞

    nodeB1.physicsBody?.collisionBitMask = nodeB2Category // B1 与 B2 碰撞 nodeB2.physicsBody?.collisionBitMask = nodeB1Category // B2 与 B1 碰撞

    nodeA2.physicsBody?.collisionBitMask = nodeB2Category // A2 与 B2 碰撞 nodeB2.physicsBody?.collisionBitMask = nodeA2Category // B2 与 A2 碰撞

您现在应该得到所有想要的碰撞,但没有联系通知。如果你想做一些这些节点碰撞的事情,你必须实现contactTest 位掩码以及didBeg(contact:) 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多