【问题标题】:Spawn enemies does not work good in spritekit / swift生成敌人在 spritekit / swift 中效果不佳
【发布时间】:2016-01-27 10:31:08
【问题描述】:

我想按顺序生成敌人。所以为此编写了一个代码,但无法理解为什么只有两个第一个敌人出现在正确的位置,而其余的则在错误的位置产生。这是代码:

func addDoor() {
    for i in 0...1 {
        let doorSprite = SKSpriteNode(imageNamed: "Door")
        doorSprite.name = "door\(i)"
        if i == 0 {
            doorSprite.position = CGPointMake(self.frame.size.width / 2.0 - 40.0 - doorSprite.frame.size.width, self.frame.size.height - doorSprite.frame.size.height / 2.0)
        } else {
            doorSprite.position = CGPointMake(self.frame.size.width / 2.0 + 40.0 + doorSprite.frame.size.width, self.frame.size.height - doorSprite.frame.size.height / 2.0)
        }
        gameLayer.addChild(doorSprite)
    }
}

func enemySpawn() {
    for i in 0..<15 {
        let sprite = Enemy(imageNamed: "Enemy")
        sprite.name = "enemy\(i)"

        let randDoor = Int(arc4random_uniform(2))

            if randDoor == 0 {
                if let door = gameLayer.childNodeWithName("door\(randDoor)") {
                    sprite.position = CGPointMake((door.position.x - door.frame.size.width / 2.0) + spawnPoint(UInt32(door.frame.size.width - sprite.frame.size.width)) + sprite.frame.size.width / 2.0, door.position.y)
                }
            } else {
                if let door = homeLayer.childNodeWithName("door\(randDoor)") {
                    sprite.position = CGPointMake((door.position.x - door.frame.size.width / 2.0) + spawnPoint(UInt32(door.frame.size.width - sprite.frame.size.width)) + sprite.frame.size.width / 2.0, door.position.y)
                }
            }
        }

        enemiesLayer.runAction(SKAction.waitForDuration(NSTimeInterval(i)), completion: {
            self.enemiesLayer.addChild(sprite)
        })

    }
}

func spawnPoint(num: UInt32) -> CGFloat {
    let randomSpawn: CGFloat = CGFloat(arc4random_uniform(num))
    return randomSpawn
}

【问题讨论】:

  • 无法从您的代码中分辨出“正确”或“错误”的位置。
  • 第一种方法在场景中添加两个门。然后我想在其中一扇门上依次生成敌人。所以在第二个函数中只向门添加了两个敌人,其余的出现在 CGPointMake(0.0, 0.0) 中,不过它应该出现在门所在的位置。
  • 出了点问题,'if let door = gameLayer.childNodeWithName("door(randDoor)")' 中的可选绑定

标签: ios swift sprite-kit swift2 sprite


【解决方案1】:

一方面,ifelse 块中的逻辑完全相同。

我不太确定您要在这里做什么,或者应该如何使用 randDoor 变量,但整个 if - else 块没有做任何事情。

【讨论】:

  • 有两扇门是用来作为出生点的。两人都停留在不同的位置。所以每个敌人都必须随机生成。
  • 还有用于计算每个敌人的不同生成点的 if - else 语句!
  • OK - 但randDoor 永远只会是01。不管是0还是1,执行的代码都是一样的。
  • 我刚刚更新了上面的代码。是的,因为有两扇门,每扇门在层中都有不同的位置。当我生成一个敌人时,它会计算其中一个门并向其中添加敌人,然后下一个敌人出现在另一扇门中,或者可能在同一扇门中,随机出现,依此类推。所以 if-else 语句需要计算出哪个门可以产生敌人。
  • 谢谢我发现了错误! tebs1200 喜欢!
猜你喜欢
  • 2016-07-14
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 2013-03-10
  • 2017-10-04
相关资源
最近更新 更多