Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift/SpriteKit-碰撞和物体_Swift_Sprite Kit_Collision Detection_Skphysicsbody_Skphysicscontact - Fatal编程技术网

Swift/SpriteKit-碰撞和物体

Swift/SpriteKit-碰撞和物体,swift,sprite-kit,collision-detection,skphysicsbody,skphysicscontact,Swift,Sprite Kit,Collision Detection,Skphysicsbody,Skphysicscontact,我有一个名为Item的类,其中有一个名为itemNode的实例变量,类型为SKSpriteNode。在我的游戏场景类中,当我创建物品的实例时,我会创建一个物理实体,该实体将被赋予物品的itemNode。在我的碰撞检测系统中,当角色的物理体与itemNode的物理体碰撞时,我希望在其节点的物理体刚刚碰撞的Item对象上执行一个函数。然而,碰撞系统只返回物理体。如何仅在给定节点的物理体的情况下访问Item对象?SKPhyicsBody类具有指向其所附加的SKNode实例的属性 您的碰撞检测代码可以如

我有一个名为Item的类,其中有一个名为itemNode的实例变量,类型为SKSpriteNode。在我的游戏场景类中,当我创建物品的实例时,我会创建一个物理实体,该实体将被赋予物品的itemNode。在我的碰撞检测系统中,当角色的物理体与itemNode的物理体碰撞时,我希望在其节点的物理体刚刚碰撞的Item对象上执行一个函数。然而,碰撞系统只返回物理体。如何仅在给定节点的物理体的情况下访问Item对象?

SKPhyicsBody类具有指向其所附加的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
}
UserData属性:

item.userData = NSMutableDictionary(object: self, forKey: "ItemInstance"))

谢谢,这让我更近了一步。但是现在我有了节点(它是Item类的一个实例变量),有没有办法访问节点所属的Item对象?
item.userData = NSMutableDictionary(object: self, forKey: "ItemInstance"))