2015-09-01 3 views
0

Когда я пытаюсь запустить действие по спрайту, я установил константу в didMoveToView, я использую то же имя для него в функции touchesBegan и получаю «использование ошибки неразрешенного идентификатора:« плеер ». У меня есть другой .! игра, где я так точно такую ​​же вещь, и она отлично работает Нужна помощь Вот мой код:.Swift SpriteKit: использование неразрешенного идентификатора «плеер»?

import SpriteKit 

class GameScene: SKScene { 

    var movingGround : MCTGround! 
    var fruitGenerator : MCTFruitGen! 
    var cloudGenerator: MCTCloudGen! 

    var isStarted = false 

    override func didMoveToView(view: SKView) { 

     let player = SKSpriteNode(imageNamed: "koala_idle") 
     player.position = CGPointMake(95, 150) 
     addChild(player) 

     backgroundColor = UIColor(red: 159.0/255.0, green: 201.0/255.0, blue: 244.0/255.0, alpha: 1.0) 
     movingGround = MCTGround(size: CGSizeMake(view.frame.width, 20)) 

     movingGround.position = CGPointMake(0, view.frame.size.height/4) 

     addChild(movingGround) 

     fruitGenerator = MCTFruitGen(color: UIColor.clearColor(), size: view.frame.size) 
     fruitGenerator.position = view.center 

     addChild(fruitGenerator) 

     let frames = [ 
      SKTexture(imageNamed: "koala_idle"), 
      SKTexture(imageNamed: "koala_walk01"), 
      SKTexture(imageNamed: "koala_walk02"), 


     ] 

     let duration = 1.5 + drand48() * 1.0 

     let move = SKAction.animateWithTextures(frames, timePerFrame:0.10) 
     let wait = SKAction.waitForDuration(duration) 
     let rest = SKAction.setTexture(frames[0]) 
     let sequence = SKAction.sequence([move, rest]) 

     player.runAction(SKAction.repeatActionForever(sequence)) 

     cloudGenerator = MCTCloudGen(color: UIColor.clearColor(), size: view.frame.size) 
     cloudGenerator.position = view.center 
     addChild(cloudGenerator) 
     cloudGenerator.populate(7) 
     cloudGenerator.startGeneratingWithSpawnTime(1) 
    } 


    func start() { 
     isStarted = true 

     cloudGenerator.startGeneratingWithSpawnTime(1) 
    } 

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
     jumpPlayer() 
     movingGround.start() 

     fruitGenerator.startGeneratingFruitEvery(1) 
    } 

    override func update(currentTime: CFTimeInterval) { 

    } 


    func jumpPlayer() { 
     let jumpUpAction = SKAction.moveByX(0, y: 40, duration: 0.5) 
     let jumpDownAction = SKAction.moveByX(0, y: -40, duration: 0.5) 

     let jumpSequence = SKAction.sequence([jumpUpAction, jumpDownAction]) 
     player.runAction(jumpSequence) // This is where my error is 
    } 
} 
+0

Добро пожаловать на SO. Это не ошибка. Задайте конкретный вопрос. – Adriaan

+0

Я спрашиваю, как это исправить. –

+0

Если вы используете «неуправляемый идентификатор быстрого доступа» Google, вы получаете 47 300 результатов. Если вы нажмете на первый результат, он отведет вас на ваш вопрос. –

ответ

0

Сделать player переменная сфера класса (свойство) Объявите это не функция, а уровень выше.

var player: SKSpriteNode? 

override func didMoveToView(view: SKView) { 

    player = SKSpriteNode ... 

затем получить доступ к нему через player?. Самый безопасный способ.

+0

Каждый раз, когда я объявляю его вне функции, моя игра падает, и я получаю ошибку EXC_BAD_INSTRUCTION. –

0

Ваша проблема в том, что вы объявляете player внутри didMoveToView. Это делает его закрытым для метода didMoveToView. Все, что вам нужно сделать, это переместить let player = SKSpriteNode(imageNamed: "koala_idle") туда, где вы объявляете movingGround и другие переменные с ним.

Начинающему код должен выглядеть следующим образом:

import SpriteKit 

class GameScene: SKScene { 

var movingGround : MCTGround! 
var fruitGenerator : MCTFruitGen! 
var cloudGenerator: MCTCloudGen! 
let player = SKSpriteNode(imageNamed: "koala_idle") 

var isStarted = false 

override func didMoveToView(view: SKView) { 

    player.position = CGPointMake(95, 150) 
    addChild(player) 
+0

Ive пробовал это, и я все равно получаю ту же ошибку. В моей последней игре я положил ее в didMoveToView, и он работал в каждой функции, в которую я ее ввел. –

+0

Это работает для меня. Я добавляю то, что вам нужно сделать для моего сообщения. – septicorn

+0

Теперь он отлично работает, спасибо огромное! –

Смежные вопросы