我用自己的类扩展了SKSpriteNode,以便拥有更多的函数。
但是,当某个“点击”这个节点并调用didBeginContact时,如何获取这个扩展节点?
因为contact.bodyAcontact.bodyB是物理体,这是游戏场景的父对象。
这是我的skspritenode的子类:

class Orange: SKSpriteNode {
    ...

    func createPhysicsBody(){
        self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width / 2)
        self.physicsBody?.dynamic = true
        ...
    }
}

这是我的didbegincontact代码:
func didBeginContact(contact: SKPhysicsContact){
    switch(contact.bodyA.categoryBitMask + contact.bodyB.categoryBitMask){
        case orangeCategory + bulletCategory:
            contactOrangeBullet(contact.bodyA, bodyB: contact.bodyB)
            break;
        default:
            break;
    }
}

incontactOrangeBullet只是在这种情况发生时处理所有事情的代码。但我需要的不仅仅是physicsBody。我需要一个‘橘子’,它只是其中的一部分。
或者我是否理解了一些错误,这是不可能的,因为PhysicsBody不坚持“橙色”,尽管它是在那里创建的?

最佳答案

所以,这里有一个例子,说明如何获取与物理体相关联的节点。

var node = SKSpriteNode(imageNamed: "theimage")

node.physicsBody = SKPhysicsBody(circleOfRadius: 6)

var copy = node.physicsBody

现在,我将得到与copy相关联的sknode
var node = copy.node

所以,您只需调用physicsbody上的属性node。请记住,node属性返回一个SKNode,而不是SKSpriteNode

关于swift - 如何通过physicsBody获取SKSpriteNode?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31772869/

10-12 14:39