Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我如何防止同一阶级的敌人;“分享”;健康?_Ios_Swift_Xcode - Fatal编程技术网

Ios 我如何防止同一阶级的敌人;“分享”;健康?

Ios 我如何防止同一阶级的敌人;“分享”;健康?,ios,swift,xcode,Ios,Swift,Xcode,这可能是一个相当基本的问题。我对斯威夫特很陌生,我读过几本书,现在正试图在实践中学习。我在做一个游戏,在这个游戏中,僵尸会被随机不断地繁殖,玩家的汽车会从僵尸身上碾过,直到它们死去。问题是,所有僵尸子节点似乎共享相同的运行状况,我不知道如何纠正它 我的僵尸类初始化为20运行状况,如下所示: class Zombie: SKSpriteNode, GameSprite { var initialSize:CGSize = CGSize(width: 30, height: 54) var text

这可能是一个相当基本的问题。我对斯威夫特很陌生,我读过几本书,现在正试图在实践中学习。我在做一个游戏,在这个游戏中,僵尸会被随机不断地繁殖,玩家的汽车会从僵尸身上碾过,直到它们死去。问题是,所有僵尸子节点似乎共享相同的运行状况,我不知道如何纠正它

我的僵尸类初始化为20运行状况,如下所示:

class Zombie: SKSpriteNode, GameSprite {
var initialSize:CGSize = CGSize(width: 30, height: 54)
var textureAtlas:SKTextureAtlas = SKTextureAtlas(named: "Zombies")
var health:Int = 20
当被击中时,僵尸在每次碰撞中受到4点伤害,直到死亡:

func takeDamage() {
    self.health -= 4
    print("zombie has", health, "health")
    if self.health == 0 {
        die()
    }
}
它对第一个僵尸运行良好,生命值降低五倍,然后死亡,但当第二个僵尸繁殖时,生命值保持为0,并且随着汽车继续与它们碰撞,每个僵尸的生命值都会持续负向降低。当然,没有一个僵尸在第一次死亡后死亡,因为生命值已经小于零。我理解为什么会发生这种情况,但我不确定如何将每个产卵的生命值重置为20,并为每个僵尸提供独立的生命值。我已经尝试在我的spawn函数中手动设置health变量,但它似乎没有任何作用

func spawnEnemy(){
    let enemiesToSpawn = arc4random_uniform(11) + 1
    var enemiesSpawned = UInt32(0)
    while enemiesSpawned < enemiesToSpawn {
        var spawnLocationX = player.position.x + CGFloat(arc4random_uniform(200)) + 900
        var spawnLocationY = CGFloat(arc4random_uniform(415)) - 240
        let zombie = Zombie()
        zombie.position = CGPoint(x: spawnLocationX, y: spawnLocationY)
        zombie.zPosition = 1
        zombie.position.x += 33
        zombie.health = 20
        self.addChild(zombie)
        enemiesSpawned += 1

    }

}
func(){
让enemiesToSpawn=arc4random_均匀(11)+1
var EnemiesPawned=UInt32(0)
当敌人被典当<敌人产卵{
var spawnLocationX=player.position.x+CGFloat(arc4random_uniform(200))+900
var spawnLocationY=CGFloat(arc4random_uniform(415))-240
让僵尸=僵尸()
zombie.position=CGPoint(x:spawnLocationX,y:spawnLocationY)
zombie.zPosition=1
僵尸。位置。x+=33
僵尸。健康=20
self.addChild(僵尸)
敌人典当+=1
}
}

关于为什么会发生这种情况,您的理论是什么?为每个带有userData的副本指定一个唯一的id。takeDamage在哪里定义?我不知道为什么,但我认为问题与僵尸类共享相同的引用有关。我猜这与SKNode的性质有关。尝试:如果让zombie=self.zombie?.copy()作为?SKShapeNode{self.addChild(zombie)}将zombie定义为类中的本地属性,然后在需要时复制它。