【问题标题】:How to get SKSpriteNode by physicsBody?如何通过physicsBody获取SKSpriteNode?
【发布时间】:2015-08-02 14:27:44
【问题描述】:

我用自己的类扩展了SKSpriteNode 以获得更多功能。

但是当某些东西“命中”这个节点并调用didBeginContact 时,我怎样才能得到这个扩展节点?

因为contact.bodyAcontact.bodyB 是physicsBody 并且这是游戏场景的父级。

这是我的 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;
    }
}

contactOrangeBullet 中只是在这种情况发生时处理所有事情的代码。但我需要的不仅仅是physicsBody。我需要physicsBody 只是其中一部分的“橙色”。

或者我理解错了什么,这是不可能的,因为physicsBody 不坚持“橙色”,尽管它是在那里创建的?

【问题讨论】:

    标签: swift skspritenode skphysicsbody


    【解决方案1】:

    因此,这里有一个示例,说明如何获取与物理体关联的节点。

    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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2015-01-02
    • 1970-01-01
    相关资源
    最近更新 更多