ios - 如何知道哪个 SKSpriteNode 受到 Swift 中碰撞检测的影响?

标签 ios swift object sprite-kit collision

情况:我的 iOS 屏幕上有两艘或更多艘飞船。两者都有不同的属性,如名称、大小、生命值和得分点。它们显示为 SKSpriteNodes,并且每个都添加了一个 physicsBody

目前这些额外的属性是扩展的 SKSpriteNode 类的变量。

import SpriteKit    
class ship: SKSpriteNode {
            var hitpoints: Int = nil?
            var score: Int = nil?

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

在这个“游戏”中,您可以向这些船只射击,一旦子弹击中船只,您就会获得积分。通过碰撞检测到“撞到一艘船”。

func didBeginContact(contact: SKPhysicsContact){    
    switch(contact.bodyA.categoryBitMask + contact.bodyB.categoryBitMask){
        case shipCategory + bulletCategory:
            contactShipBullet(contact.bodyA, bodyB: contact.bodyB)
            break;
        default:
            break;
    }
}

问题:碰撞检测只返回一个 physicsBody,我不知道如何通过这个 physicsBody 获取我的扩展 SKSpriteNode 类。

想法: 扩展 SKSpriteNode 以使我的对象像一艘船一样栩栩如生是否是正确的方法?当我在屏幕上添加一艘船时,它看起来像:

var ship = Ship(ship(hitpoints: 1, score: 100), position: <CGPosition>)
self.addChild(ship)

或者这只是一种错误的方法,还有更好的方法可以通过碰撞检测找出哪个具有某某统计数据的对象被子弹击中?

这个问题和我的另一个相似question - 我只想从更广泛的意义上问这个问题。

最佳答案

SKPhysicsBody 有一个属性node,它是与主体关联的SKNode。您只需要对您的 Ship 类执行一个条件转换

    if let ship = contact.bodyA.node as? Ship {
        // here you have your ship object of type Ship
        print("Score of this ship is: \(ship.score)!!!")
    }

请注意,Ship 节点可能是与 bodyB 关联的节点。

    if let ship = contact.bodyA.node as? Ship {
        // here you have your ship...
    } else if let ship = contact.bodyB.node as? Ship {
        // here you have your ship...
    }

希望这对您有所帮助。

关于ios - 如何知道哪个 SKSpriteNode 受到 Swift 中碰撞检测的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31812108/

相关文章:

ios - SpriteKit 简单形状不绘制

ios - 警告 : CLSLog has been used before (or concurrently with) Crashlytics initialization and cannot be recorded

javascript - 如何根据另一个值 [JavaScript] 在对象数组中搜索特定值?

另一个对象的 Javascript 自定义事件对象?

iOS : Change value by scrolling

ios - React native - Webview 视频在父状态更改时重新加载

ios - 改变火的方向

swift - 如何跨多个 View Controller 引用同一个类的实例?

swift - 以编程方式添加 View 和手势 - "unrecognized selector sent to instance"

javascript - 我如何使用 for in 循环遍历嵌套对象并返回连接的每个属性字符串?