2015-01-13 4 views
-2

У меня есть мой основной файл GameScene.swift и файл facebookLogin.swift.Вызов функции класса

Я создаю SKSpriteNode 'FBButton' из класса из файла facebookLogin.Swift и добавляю его в GameScene через self.addChild (FBButton). Класс имел две функции touchBegan() и facebookSignIn().

Когда пользователь прикасается к спрайту «FBButton», touchBegan() подтверждает касание кнопки и вызывает facebookSignIn(). Затем эта функция подключается к пользователям Facebook. Здесь все хорошо.

Я хочу, чтобы эта функция вызывала функцию ShowButtons() в GameScene.swift. Я вызываю GameScene(). ShowButtons(), который удаляет FBLogin SpriteNode и добавляет еще 2 SpriteNodes и загружает данные пользователей Facebook в NSDictionary.

Данные получены от пользователей Facebook, однако кнопки не генерируют FBButton не удаляется из родителя.

Пожалуйста, помогите мне в том, где я ошибаюсь.

class facebookLogin: SKNode { 

var signedIn = false 


override init() { 

    fbButton = SKSpriteNode(imageNamed: "login_with_facebook") 
    fbButton.xScale = 1.0 
    fbButton.yScale = 1.0 
    super.init() 

    addChild(fbButton) 

} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 


override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 

     let touch = touches.anyObject() as UITouch 
     let point = touch.locationInNode(self) 

     if fbButton.containsPoint(point) { 
      facebookSignin() 
     } 
} 

func facebookSignin() { 

    var permissions = ["user_about_me", 
     "user_birthday"]; 

    PFFacebookUtils.logInWithPermissions(permissions, { 
     (user: PFUser!, error: NSError!) -> Void in 
     if user == nil { 
      NSLog("Uh oh. The user cancelled the Facebook login.") 
      self.signedIn = false 
     } else if user.isNew { 
      NSLog("User signed up and logged in through Facebook!") 
      self.signedIn = true 
     } else { 
      NSLog("User logged in through Facebook!") 

      self.signedIn = true 

      GameScene().ShowButtons() 


     } 
    }) 

} 
} 

Ниже показаны кнопки скрипт

class GameScene: SKScene { 


let fbButton = facebookLogin() 
var btnHostGame: SKSpriteNode = SKSpriteNode(imageNamed: "HostGame") 
var btnJoinGame: SKSpriteNode = SKSpriteNode(imageNamed: "JoinGame")  



override func didMoveToView(view: SKView) { 

    userInteractionEnabled=true 
    self.backgroundColor = SKColor.whiteColor() 

    self.fbButton.userInteractionEnabled = true 
    self.fbButton.position = CGPoint(x: self.size.width * 0.5, y: self.size.height * 0.5) 
    addChild(self.fbButton) 

} 



func showButtons() { 

    self.btnHostGame.name = "btnHostGame" 
    self.btnHostGame.position = CGPoint(x: self.size.width * 0.5, y: self.size.height * 0.6) 
    addChild(self.btnHostGame) 

    self.btnJoinGame.name = "btnJoinGame" 
    self.btnJoinGame.position = CGPoint(x: self.size.width * 0.5, y: self.size.height * 0.40) 
    addChild(self.btnJoinGame) 

    fbButton.RemoveFromParent() 

    } 
} 

Все работает отлично, за исключением, когда он перезванивает GameScene. Кнопки не отображаются, и FBButton не удаляется.

Кто-нибудь знает решение?

Приветствия Ryann

+0

в 'GameScene(). ShowButtons()' вы создаете новый экземпляр 'GameScene', не имеет доступ к существующему экземпляру , – zaph

ответ

3

В GameScene().ShowButtons() вы фактически создаете новый экземпляр класса GameScene. Этот экземпляр не тот, который добавлен в SKView. Вот почему это не работает.

Вместо этого объявить слабым имуществом для GameScene в facebookLogin Узел.

class faceBookLogin : SKNode 
{ 
    weak var gameScene : GameScene? = nil 
} 

И добавить gameScene из вашей didMoveToView функции.

override func didMoveToView(view: SKView) { 

    userInteractionEnabled=true 
    self.backgroundColor = SKColor.whiteColor() 

    self.fbButton.userInteractionEnabled = true 
    self.fbButton.position = CGPoint(x: self.size.width * 0.5, y: self.size.height * 0.5) 
    addChild(self.fbButton) 
    self.fbButton.gameScene = self 
} 

Таким образом, вы можете позвонить, ваш представил GameScene от func facebookSignin()

func facebookSignin() { 
    // Your code. 
    self.gameScene.showButtons() 
} 
Смежные вопросы