我试图更新我的剩余生命:" UILabel
,并且我无法根据类或实例当前变量值进行更新 - 在这种情况下lives
。我在以下代码中使用didSet
来执行此操作:
Ship
类:
class Ship:SKSpriteNode{
...
var lives:Int = 0{
didSet{
shipLivesLabel?.text = self.lives.description
}
}
在GameScene
中实例化标签:
class GameScene: SKScene, SKPhysicsContactDelegate {
private var shipLives = 0 {
didSet{
self.shipLivesLabel?.text = aShip.lives.description
}
}
private var shipLivesLabel:SKLabelNode?
以及我将其添加到场景中的位置:
override func didMoveToView(view: SKView) {
let shipLivesLabel = SKLabelNode(fontNamed: "Times New Roman")
shipLivesLabel.text = shipLives.description
shipLivesLabel.fontSize = 14
shipLivesLabel.position = CGPoint(x:CGRectGetMidX(self.frame)*1.3,y:CGRectGetMidY(self.frame)*0.1)
self.addChild(shipLivesLabel)
self.shipLivesLabel = shipLivesLabel
我不确定这是否是正确的解决方法,而且我也不确定如何在shipLivesLabel
课程中引用Ship
- 我收到错误:Instance member shipLivesLabel cannot be used on type GameScene
。任何帮助都会很棒。
答案 0 :(得分:0)
您的问题在:
private var shipLives = 0 {
didSet{
self.shipLivesLabel?.text = aShip.lives.description
}
}
在此作业期间,self.shipLivesLabel
可能尚未就绪。
您尝试将未初始化的类分配给其属性的值。
语法错误:
MyClass.variable = 'Foo'
// error: Instance member 'variable' cannot be used on type 'MyClass'
语法良好:
instanceOfMyClass.variable = 'Foo'
关于你的案例:
<{1}}完全初始化之前使用的{p>GameScene.shipLivesLabel
作业。
我不喜欢你写出重要游戏属性的方法,比如角色的生命计数器。请仔细阅读此答案,以便更好地理解我的意思:answer
Tibrogargan在问题评论中提出的另一个建议是不要使用描述:这是一种不好的态度,它用于调试,实时是GameScene
,如果你想将这个分配给{{1}做:
Int