NinJump Like 游戏 Swift(分数更新问题)
NinJump Like game Swift (Score updating issue)
我正在尝试使用 Swift UIKit 创建类似 Ninjump 的游戏。一切正常,直到我添加了分数标签。这实际上很奇怪,我不明白为什么会这样。
所以我有一个敌人,当计时器更新时,它会向下播放 15px 的电影。和一个忍者,在屏幕上触摸时从左向右移动。当敌人移出屏幕时,分数会更新。发生的事情是,当敌人离开屏幕时,分数更新为 1...2..3。但是每当分数更新时,忍者如果在右边就会自动向左移动。我不知道为什么会这样。每当一个敌人走出屏幕时,它就会发生。这是我的代码
import UIKit
class GameViewController: UIViewController {
@IBOutlet weak var Ninja: UIImageView!
var score = 0
@IBOutlet weak var scoreLabel: UILabel!
var startGame = NSTimer()
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
self.updateNinja()
}
var enemyImage = UIImageView(frame: CGRectMake(32, -300, 100, 100))
override func viewDidLoad() {
super.viewDidLoad()
self.scoreLabel.text = "0"
enemyImage.image = UIImage(named: "enemy")
self.view.addSubview(self.enemyImage)
}
override func viewDidAppear(animated: Bool) {
startGame = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
}
func update() {
if CGRectIntersectsRect(self.Ninja.frame, self.enemyImage.frame) {
println("Game Over")
}
// show the enemy again and again
if self.enemyImage.frame.origin.y > self.view.frame.height {
self.enemyImage.frame.origin.y = -100
score++ // THIS IS THE PROBLEM
self.scoreLabel.text = "\(score)"
}
// move the enemy image downwards
enemyImage.frame.origin.y += 15
}
var isLeft:Bool = false // check where is the ninja left/right
func updateNinja() {
if isLeft {
isLeft = false
UIView.animateWithDuration(0.3, animations: { () -> Void in
self.Ninja.frame.origin.x = 32
})
} else {
isLeft = true
UIView.animateWithDuration(0.3, animations: { () -> Void in
self.Ninja.frame.origin.x = self.rightBar.frame.origin.x - 50
})
}
}
}
更奇怪的是,当我删除 score++ 时,它工作正常。
更新:当我尝试更新 scoreLabel 的文本时,它发生了。有什么解决办法吗?
隐藏该标签并尝试以编程方式创建新标签,更新分数的新标签。让我知道它是否适合你,我也发生过一次。
我正在尝试使用 Swift UIKit 创建类似 Ninjump 的游戏。一切正常,直到我添加了分数标签。这实际上很奇怪,我不明白为什么会这样。
所以我有一个敌人,当计时器更新时,它会向下播放 15px 的电影。和一个忍者,在屏幕上触摸时从左向右移动。当敌人移出屏幕时,分数会更新。发生的事情是,当敌人离开屏幕时,分数更新为 1...2..3。但是每当分数更新时,忍者如果在右边就会自动向左移动。我不知道为什么会这样。每当一个敌人走出屏幕时,它就会发生。这是我的代码
import UIKit
class GameViewController: UIViewController {
@IBOutlet weak var Ninja: UIImageView!
var score = 0
@IBOutlet weak var scoreLabel: UILabel!
var startGame = NSTimer()
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
self.updateNinja()
}
var enemyImage = UIImageView(frame: CGRectMake(32, -300, 100, 100))
override func viewDidLoad() {
super.viewDidLoad()
self.scoreLabel.text = "0"
enemyImage.image = UIImage(named: "enemy")
self.view.addSubview(self.enemyImage)
}
override func viewDidAppear(animated: Bool) {
startGame = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
}
func update() {
if CGRectIntersectsRect(self.Ninja.frame, self.enemyImage.frame) {
println("Game Over")
}
// show the enemy again and again
if self.enemyImage.frame.origin.y > self.view.frame.height {
self.enemyImage.frame.origin.y = -100
score++ // THIS IS THE PROBLEM
self.scoreLabel.text = "\(score)"
}
// move the enemy image downwards
enemyImage.frame.origin.y += 15
}
var isLeft:Bool = false // check where is the ninja left/right
func updateNinja() {
if isLeft {
isLeft = false
UIView.animateWithDuration(0.3, animations: { () -> Void in
self.Ninja.frame.origin.x = 32
})
} else {
isLeft = true
UIView.animateWithDuration(0.3, animations: { () -> Void in
self.Ninja.frame.origin.x = self.rightBar.frame.origin.x - 50
})
}
}
}
更奇怪的是,当我删除 score++ 时,它工作正常。
更新:当我尝试更新 scoreLabel 的文本时,它发生了。有什么解决办法吗?
隐藏该标签并尝试以编程方式创建新标签,更新分数的新标签。让我知道它是否适合你,我也发生过一次。