我有一个每2秒发生一次的函数,创建一个SKShapeNode
。在任何时间点,屏幕上都有不止一个精灵。当我调用另一个函数时,为了检测其中一个精灵和主角之间的联系,应用程序崩溃,因为didBeginContact
函数不知道要运行哪个精灵:
func didBeginContact(contact: SKPhysicsContact) {
enemy.runAction(SKAction.fadeOutWithDuration(1))
enemy.runAction(SKAction.scaleTo(1.5, duration: 1))
enemy.removeFromParent()
}
精灵正在创造:
func Enemy(){
let enemy = SKShapeNode(circleOfRadius: 15)
self.addChild(enemy)
enemy.runAction(SKAction.moveTo(CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)), duration: 2.0))
}
无论如何要区分Swift中的副本,例如可以为每个副本调用的唯一键吗?
答案 0 :(得分:0)
contact.bodyA.node
是主角或碰撞精灵。 contact.bodyB.node
是另一个。
为敌人制作一个子类:
class Enemy: SKSpriteNode { }
使用它:
func addEnemy(){
let enemy = Enemy(circleOfRadius: 15)
self.addChild(enemy)
enemy.runAction(SKAction.moveTo(CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)), duration: 2.0))
}
检查:
func didBeginContact(contact: SKPhysicsContact) {
if let enemy = contact.bodyA.node as? Enemy {
removeEnemy(enemy)
} else if let enemy = contact.bodyB.node as? Enemy {
removeEnemy(enemy)
}
}
func removeEnemy(enemy: Enemy) {
enemy.runAction(SKAction.fadeOutWithDuration(1))
enemy.runAction(SKAction.scaleTo(1.5, duration: 1))
enemy.removeFromParent()
}
答案 1 :(得分:0)
制作敌人子类:
class Enemy: SKShapeNode { }
使用存储ID的属性:
var ID: String?
在敌人创建期间设置ID:
func Enemy(){
let enemy = SKShapeNode(circleOfRadius: 15)
enemy.ID = a unique ID
self.addChild(enemy)
enemy.runAction(SKAction.moveTo(CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)), duration: 2.0))
}
检查
中的敌人IDfunc didBeginContact(contact: SKPhysicsContact) {
if let enemy = contact.bodyA.node as? Enemy {
if enemy.ID = ...
} else if let enemy = contact.bodyB.node as? Enemy {
if enemy.ID = ...
}