在碰撞检测后调用自定义类方法,返回SKPhysicsBody

时间:2014-11-18 04:29:24

标签: swift sprite-kit

我想出了如何使用PhysicsBody进行碰撞检测,这种方法有效:

// Method call:
projectileDidCollideWithMonster(firstBody.node as SKSpriteNode, monster: secondBody.node as SKSpriteNode)

// Method:
func projectileDidCollideWithMonster(projectile:SKSpriteNode, monster:SKSpriteNode!) {
    projectile.removeFromParent()
    monster.removeFromParent()
}

方法调用放在一个充当SKPhysicsContact接收者的方法中。它获取一对传递给它的SKPhysicsBody个对象,检查它们是否是正确的类型,然后调用另一个方法来删除这些对象。

但是,我希望改变怪物的生命值。

我创建了一个名为Monster的独立类,其中包含以下代码:

import Foundation
import SpriteKit

class Monster : SKSpriteNode {
    var hp : Int

    override init () {
        let color = UIColor()
        let texture = SKTexture(imageNamed: "monster")
        let size = texture.size()
        hp = 5

        super.init (texture: texture, color: color, size: size)
        self.physicsBody = SKPhysicsBody(rectangleOfSize: size)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func subtract () {
        hp--
        println(hp)
    }
}

所以我想运行这个为Monster定制的代码:

projectileDidCollideWithMonster(firstBody.node as SKSpriteNode, monster: secondBody.node as Monster)

func projectileDidCollideWithMonster(projectile:SKSpriteNode, monster:Monster!) {
    projectile.removeFromParent()
    monster.subtract();
}

在Java中,我可以强制转换它,例如(Monster)secondBody.node。我知道第二个身体是一个怪物。 Monster持有对它的PhysicsBody的引用,并继承SKSpriteNode

我试过这个:let theMonster = secondBody.node as Monster但是那也没有用。

sprite kit物理引擎似乎返回了PhysicsBody对象,我可以在其上调用removeFromParent()等内置方法。但我想改为调用我自己的subtract()方法,这是Monster的一部分!

如何在通过碰撞检测收到的对象上触发自定义方法?

1 个答案:

答案 0 :(得分:0)

我明白了!

let theMonster = monster as Monster
projectile.removeFromParent()
theMonster.subtract();

谢谢!