【发布时间】:2016-01-03 02:40:25
【问题描述】:
我一直在为我的 tvOS sprite kit 游戏制作分数和高分显示。我有两节课。其中一个类称为“GameViewController”,一个 UIViewController,另一个是我的玩家的 SKSpriteNode 的子类。我想要做的是每五次更新,分数就会更新。分数和高分的标签通过我的 GameViewController 类中的变量访问。在我的 Player 类中是完成更新的地方,所以我需要在我的 GameViewController 类中触发一个方法从我的 Player 类。
我已经尝试了一些方法。我得到的最远的方法是使用“协议”和“代表”的这种方法。我有一个名为“ScoreUpdateResponder”的protocol 类,它有一个方法:
scoreUpdate(let score: Int)
因此,我的 GameViewController 实现了(?我是一名 Java 开发人员,试图在这里连接点) Responder 类。所以我的精简类结构如下所示:
玩家类:
class Player: SKSpriteNode
{
weak var responder: ScoreUpdateResponder?
init(responder : ScoreUpdateResponder)
{
self.responder = responder
}
let score = 0
func update()
{
if(score % 5 == 0)
{
responder?.updateScore(score / 5)
}
score++;
}
}
** ScoreUpdateResponder 类**
protocol ScoreUpdateResponder : class
{
func updateScore(let score: Int)
}
然后我的 GameViewController 是:
class GameViewController: UIViewController, ScoreUpdateResponder
{
func updateScore(score: Int)
{
scoreValue.text = String(score)
if(score > Int.init(highscoreValue.text!)!)
{
highscoreValue.text = String(score)
}
}
}
我知道我一定错过了什么。我怀疑它与我对响应者的初始化有关,或者更普遍地在 Player 类中。有什么帮助吗?
【问题讨论】:
-
看起来您的初始化设置不正确,如果缺少代码,请使用 ... 让人们知道那里应该有东西
-
你在做super.init吗?因为现在你在技术上没有一个 SKSpriteNode,这让我觉得这里的 init 甚至没有被调用,所以你的响应者是 nil
-
我不确定如何设置 init。我尝试使用 NSCoder 参数制作一个,但这让我需要使用 NSCoder 参数初始化播放器——这是我不想做的事情。
标签: swift sprite-kit tvos