Загрузите некоторую частную переменную в состоянии переключателя - PullRequest
0 голосов
/ 09 апреля 2019

Я делаю простую игру для iOS, и у меня есть некоторые проблемы.Действительно, я создал свои разные классы для своих элементов: планеты, пули, фона и астероидов.Однако, когда я пытаюсь инициализировать их при условии переключения (из GameScene), у меня появляется сообщение об ошибке «ожидаемое объявление».

Переменная «lvlSelected» является глобальной и представляет уровень, заданный игроком (издругая сцена).

Вот мой код переключения:

 switch lvlSelected {
case 1 :
private var planet = Planet(imageName: "Planet1")
private var bullet = Bullet(imageName: "Bullet1")
private var background = Background(imageName: "Background1")
private var asteroide = Asteroides(img: "Asteroid1")

case 2 :
private var planet = Planet(imageName: "Planet2")
private var bullet = Bullet(imageName: "Bullet2")
private var background = Background(imageName: "Background2")
private var asteroide = Asteroides(img: "Asteroid2")

default :
private var planet = Planet(imageName: "Planet")
private var bullet = Bullet (imageName: "Bullet")
private var background = Background(imageName : "Background")
private var asteroide = Asteroides(img."Asteroid")
}

Спасибо за вашу помощь


Вот класс моей Планеты:

class Planet:SKSpriteNode {

init(imageName: String){

    let texture = SKTexture(imageNamed : imageName)
    super.init(texture: texture, color: .clear, size: texture.size())

    self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width/2, center: self.anchorPoint) 
    self.physicsBody!.affectedByGravity = false 
    self.physicsBody!.categoryBitMask = GameScene.physicsCategories.planet
    self.physicsBody!.collisionBitMask = GameScene.physicsCategories.none
    self.physicsBody!.contactTestBitMask = GameScene.physicsCategories.asteroid

}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
 func addPlanet(parent: GameScene) {
    self.setScale(0.55)
    self.position = CGPoint(x: parent.size.width / 2, y: -self.size.height)
    self.zPosition = 2
    self.anchorPoint = CGPoint(x: 0.5, y: 0.5)
    parent.addChild(self)
}

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Это должно быть так, как вы хотите.

private var planet = Planet(imageName: "Planet")
private var bullet = Bullet (imageName: "Bullet")
private var background = Background(imageName : "Background")
private var asteroide = Asteroides(img."Asteroid")

switch lvlSelected {
case 1 :
  planet = Planet(imageName: "Planet1")
  bullet = Bullet(imageName: "Bullet1")
  background = Background(imageName: "Background1")
  asteroide = Asteroides(img: "Asteroid1")
break
case 2 :
  planet = Planet(imageName: "Planet2")
  bullet = Bullet(imageName: "Bullet2")
  background = Background(imageName: "Background2")
  asteroide = Asteroides(img: "Asteroid2")
  break
default :
  break
}

Если вы объявите переменную внутри регистра, он будет доступен только внутри этого регистра.

0 голосов
/ 09 апреля 2019

В вашем случае нет необходимости использовать переключатель, вы можете использовать интерполяцию строк:

class GameScene : SKScene
{
    private let planet : Planet
    private let bullet : Bullet
    private let background : Background
    private let asteroide : Asteroides
    convenience init(lvlSelected : Int){

        let level = 1 ... 2 ~= lvlSelected ? "\(lvlSelected)" : ""
        planet = Planet(imageName: "Planet\(level)")
        bullet = Bullet (imageName: "Bullet\(level)")
        background = Background(imageName: "Background\(level)")
        asteroid = Asteroides(img: "Asteroid\(level)")
        self.init() //whatever init you use here
    }
}

~= является оператором сопоставления с шаблоном, а #a ... #b означает диапазон чисел между a и b, включая a и b, поэтому вы спрашиваете, находится ли число в определенном диапазоне

(condition) ? (statement 1) : (statement 2) - троичный оператор, который является условием, если условие истинно, тогда оператор 1, оператор 2

"\(var)" - это строковая интерполяция, которая указывает строке вводить значение var в строку

...