如何通过physicsBody获取SKSpriteNode?

Posted

技术标签:

【中文标题】如何通过physicsBody获取SKSpriteNode?【英文标题】:How to get SKSpriteNode by physicsBody? 【发布时间】: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 不坚持“橙色”,尽管它是在那里创建的?

【问题讨论】:

【参考方案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

【讨论】:

是的,这就是我目前正在使用的。但是这个 SKNode 对我的Orange 类函数和属性一无所知。 我现在就是这样做的:***.com/questions/31812108/…

以上是关于如何通过physicsBody获取SKSpriteNode?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 使 sksprite 节点随时间移动得更快

为 SKSprite 游戏创建登录页面

将 SKSprite 的图像更改为 SKShapeNode

SKSprite 场景的内存问题

检查没有物理实体的 SKSprite 节点之间的碰撞

在随机位置生成 SKSprite