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