我有一个每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中是否有区分副本的方法,比如可以为每个副本调用一个唯一的密钥?
最佳答案
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()
}
关于ios - 如何区分 Sprite 副本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33793804/