调用类函数



我有我的主GameScene.swift文件和一个facebookLogin.swift文件。

我正在从facebookLogin.Swift文件中的类创建一个SKSpriteNode'FBButton',并通过self.addChild(FBButton)将其添加到GameScene中。该类有两个函数touchBegan()和facebookSignIn()。

当用户触摸精灵"FBButton"时,touchBegan()确认触摸按钮并调用facebookSignIn()。然后,此功能连接到用户Facebook。到这里为止一切都很好。

然后,我希望这个函数在GameScene.swift中调用ShowButtons()函数。我称之为GameScene()。ShowButtons() 删除了 FBLogin SpriteNode,并添加了 2 个 SpriteNode,并将用户的 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()
    }
}

一切都运行良好,除非它回调到游戏场景。按钮不会出现,FBButton也不会被删除。

有人知道解决方案吗?

干杯瑞安

GameScene().ShowButtons()中,您实际上是在创建GameScene类的新实例。此实例不是当前添加到SKView的实例。这就是为什么它不起作用的原因。

而是在节点中声明GameScene facebookLogin属性

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

并从您的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
}

通过这种方式,您可以从func facebookSignin()调用您呈现的GameScene

func facebookSignin()  {
   // Your code.
   self.gameScene.showButtons()
}

最新更新