我有一个每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/

10-11 22:05
查看更多