我想出了如何使用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的一部分!
如何在通过碰撞检测收到的对象上触发自定义方法?
答案 0 :(得分:0)
我明白了!
let theMonster = monster as Monster
projectile.removeFromParent()
theMonster.subtract();
谢谢!