我正在尝试使用此代码在我的精灵工具包/ 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()时,我收到此消息:在调用中缺少参数#1的参数。
我试图让它运作但没有成功。我能做些什么才能让它发挥作用?
答案 0 :(得分:1)
协议可能是在类之间进行通信的最佳方式,特别是如果您希望保持代码的原样。
在starNode类之上添加协议
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 func是我假设你创建了一个starNode实例来访问你所创建的StarNode类。
例如
let starNode = StarNode(...
所以现在你需要让该类确认你创建的协议。
class GameScene: SKScene, StarNodeDelegate {
}
在创建starNode实例后,在ViewDidLoad中添加此代码
starNode.delegate = self // telling the scene to confirm to the protocol
并瞧瞧你的
func endGame()
将被调用。
答案 1 :(得分:0)
要调用另一个类的方法,首先需要创建该(另一个)类的对象,并使用该对象创建类函数。
像这样,
假设类名为 AnotherClass ,其中包含endGame()函数。
class StarNode: GameObjectNode {
override func collisionWithBall(ball: SKNode) -> Bool {
let obj = AnotherClass()
obj.endGame()
return true
}
}