ios - 从 Swift 中的其他类调用函数

标签 ios swift sprite-kit

我正在尝试使用以下代码从我的 sprite kit/swift 游戏中的另一个类调用一个函数:

class StarNode: GameObjectNode {
    override func collisionWithBall(ball: SKNode) -> Bool {
        endGame()

        return true
    }
}

这个函数在另一个类中:

func endGame() {
    gameOver = true
    GameFile.sharedInstance.saveState()

    let reveal = SKTransition.fadeWithDuration(0.5)
    let endGameScene = GameOverScene(size: self.size)
    self.view!.presentScene(endGameScene, transition: reveal)
}

但是当我调用 endGame() 时,我收到了这条消息:Missing argument for parameter #1 in call

我试过让它工作但没有成功。我该怎么做才能让它发挥作用?

最佳答案

协议(protocol)可能是类之间通信的最佳方式,尤其是当您希望保持代码原样时。

在 starNode 类之上添加协议(protocol)

protocol StarNodeDelegate: class {
    func endGame()
} 

比起向 starNode 类添加一个属性

weak var delegate: StarNodeDelegate?

现在您的 starNode 类应该如下所示。

protocol StarNodeDelegate: class {
     func endGame()
} 

class StarNode: GameObjectNode {

weak var delegate: StarNodeDelegate?    


override func collisionWithBall(ball: SKNode) -> Bool {
    delegate?.endGame()

    return true
  }
}

现在在发生碰撞和 gameOver 函数的场景中,我假设您创建了一个 starNode 实例来访问您创建的 StarNode 类。

例如。

let starNode = StarNode(...

所以现在您需要让该类确认您创建的协议(protocol)。

class GameScene: SKScene, StarNodeDelegate {

}

比在创建 starNode 实例后添加此代码的 ViewDidLoad

starNode.delegate = self // telling the scene to confirm to the protocol

瞧你的

func endGame() 

会被调用。

关于ios - 从 Swift 中的其他类调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34727894/

相关文章:

ios - swift auto-abbreviates my NSURL with "... "over the characters it can't fit?

ios - 哪个框架可以为 iOS 制作基于菜单的游戏?

ios - 如何让 iOS 应用记住用户从 UIImagePickerController 选择的图像

ios - XCode 中这个条形图上的渐变代表什么?

ios - 仅显示一次演练场景 ios swift

swift - 在 Swift 应用程序中从 Excel 文档中读取数据

ios - 将设备名称设置为 session 中的对等点 多点连接 swift3

ios - 无法识别的选择器发送到实例 : setting an @property id to a tableviewcontroller

swift - 如何在 Swift 2 的 while 循环中创建延迟?

swift - 如何将敌人移向移动的玩家?