Что не так с @objc func addAlien? - PullRequest
0 голосов
/ 23 февраля 2019

Я получаю 2 ошибки в строке @objc func addAlien() (@objc может использоваться только с членами классов) и gameTimer = Timer.scheduledTimer(timeInterval: 0.75, target: self, selector: #selector(addAlien), userInfo: nil, repeats: true) (использование локальной переменной 'addAlian' перед ее объявлением)

ИзвинитеЯ новичок в разработке Swift, есть идеи, как это исправить?

Спасибо.

import SpriteKit
import GameplayKit

class GameScene: SKScene, SKPhysicsContactDelegate {

var starfield: SKEmitterNode!
var player: SKSpriteNode!
var scoreLabel: SKLabelNode!
var score: Int = 0{
didSet {
scoreLabel.text = "Счет \(score)"
}
}

var gameTimer: Timer!
var aliens = ["alien" , "alien2" , "alien3 "]

override func didMove(to view: SKView) {
starfield = SKEmitterNode (fileNamed: "Starfield") // Connect animation to starfield
starfield.position = CGPoint(x: 0, y: 1472) // Position starfield on screen
starfield.advanceSimulationTime(10) 
self.addChild(starfield) // Add starfield on screen

starfield.zPosition = -1 


player = SKSpriteNode(imageNamed: "damir2") // Подключаем картинку игрока
player.position = CGPoint (x: 0, y: -300) // Позиция игрока


self.addChild(player) // add player



self.physicsWorld.gravity = CGVector(dx: 0, dy: 0) // Delete gravitation from the game
self.physicsWorld.contactDelegate = self 


scoreLabel = SKLabelNode(text: "Score: 0") // Score table
scoreLabel.fontName = "AmericanTypewriter-Bold" // Шрифт для таблички
scoreLabel.fontSize = 56 
scoreLabel.fontColor = UIColor.white 
scoreLabel.position = CGPoint(x: -200, y: 500) 
score = 0 

self.addChild(scoreLabel) 


gameTimer = Timer.scheduledTimer(timeInterval: 0.75, target: self, selector: #selector(addAlien), userInfo: nil, repeats: true)

@objc func addAlien(){   
aliens = GKRandomSource.sharedRandom().arrayByShufflingObjects(in: aliens) as! [String]

let alien = SKSpriteNode(imageNamed: aliens[0])
let randomPos = GKRandomDistribution(lowestValue: 20, highestValue: 350)
let pos = CGFloat(randomPos.nextInt())
alien.position = CGPoint(x: pos, y: -800)



}

}


override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
}

1 Ответ

0 голосов
/ 23 февраля 2019

В соответствии с кодом, которым вы поделились - вы объявили addAlien внутри функции didMove.Вам нужно переместить addAlien из функции didMove и поместить его на тот же уровень с didMove - в области видимости класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...