2

我有一个名为 Item 的类,里面有一个名为 itemNode 的实例变量,它的类型为 SKSpriteNode。在我的 GameScene 类中,当我创建 Item 的一个实例时,我创建了一个物理体,它被赋予了 Item 的 itemNode。在我的碰撞检测系统中,当我的角色的物理体与 itemNode 的物理体发生碰撞时,我想在其节点的物理体刚刚碰撞的 Item 对象上执行一个函数。然而,碰撞系统只返回物理体。仅在给定节点的物理主体的情况下,如何访问 Item 对象?

4

1 回答 1

2

SKPhyicsBody 类有一个node 属性,它指向它所附加的 SKNode 实例。

您的碰撞检测代码可能如下所示:

func didBeginContact(contact: SKPhysicsContact) {

    var item: SKSpriteNode
    var character: SKSpriteNode

    //Change this on the basis of the order of your categoryBitMask values
    if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
    {
        item = contact.bodyA.node as SKSpriteNode
        character = contact.bodyB.node as SKSpriteNode
    }
    else
    {
        item = contact.bodyB.node as SKSpriteNode
        character = contact.bodyA.node as SKSpriteNode
    }

    //Perform necessary operations on item and character
}

编辑: 为了访问声明节点的 Item 实例,您必须在指向 Item 实例的节点内存储一个变量。为此,您可以继承 SKSpriteNode 并包含一个属性,或者使用 SKNode 的userData 属性

子类化:

//New Class
class ItemNode: SKSpriteNode {

    static var itemInstance
}

//In the Item class declare the itemNode using this class
let itemNode = ItemNode()
itemNode.itemInstance = self

用户数据属性:

item.userData = NSMutableDictionary(object: self, forKey: "ItemInstance"))
于 2015-04-09T07:29:01.637 回答