我的問題:在一個函數中聲明的NSTimer()會影響另一個函數。NSTimer的範圍()
我正在製作一個簡單的RPG遊戲,允許兩個玩家互相對抗。遊戲有一個文本框,其中顯示一秒消息,例如「玩家一次攻擊」等。遊戲結束後,文本框應打印出勝利者並將消息留在文本字段中。爲了解決第一部分(顯示一個消息,一秒後顯示一個空字符串),我做了如下代碼:
func printEmpty() {
textToDisplayLabel.text = ""
}
func announcer(player: Character) {
var timer = NSTimer()
textToDisplayLabel.text = "\(player.name) attacks"
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "printEmpty", userInfo: nil, repeats: false)
}
要解決的第二部分(顯示有關贏家的信息,並把它在文本字段)我用:
func hideAfterAPlayerHasWon(winner: Character) {
leftPlayerAttackButton.hidden = true
rightPlayerAttackButton.hidden = true
leftPlayerHpLabel.hidden = true
rightPlayerHpLabel.hidden = true
leftPlayerNameLabel.hidden = true
rightPlayerNameLabel.hidden = true
if winner.side == Character.playerSide.left {
soldierMain.hidden = true
let centerXConst = NSLayoutConstraint(item: orcMain, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 1)
let centerYConst = NSLayoutConstraint(item: orcMain, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: 1)
self.view.addConstraint(centerXConst)
self.view.addConstraint(centerYConst)
textToDisplayLabel.text = "\(leftPlayer.name) has won"
} else {
orcMain.hidden = true
let centerXConst = NSLayoutConstraint(item: soldierMain, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 1)
let centerYConst = NSLayoutConstraint(item: soldierMain, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: 1)
self.view.addConstraint(centerXConst)
self.view.addConstraint(centerYConst)
textToDisplayLabel.text = "\(rightPlayer.name) has won"
}
}
是,當遊戲開始時,有關的行動信息,例如「玩家攻擊」等顯示的問題,他們在一秒鐘後躲,因爲我希望他們要做的事情,但關於獲勝者的信息就像你的行爲一樣ght定時器只在播音員功能中聲明。所以問題發生在我身上:NSTimer()的範圍是什麼,我該如何解決這個問題?
編輯:在這裏播音員被稱爲(以及hideAfter ...)什麼的NSTimer()的範圍功能
@IBAction func onLeftPlayerAttackPressed(sender: UIButton) {
if leftPlayer.type == Character.charType.orc {
playOrcSlash()
}
if leftPlayer.type == Character.charType.soldier {
playSoldierSlash()
}
announcer(leftPlayer)
updateHp(leftPlayer, defender: rightPlayer)
disableButton(leftPlayerAttackButton)
if !(rightPlayer.isAlive) {
hideAfterAPlayerHasWon(leftPlayer)
}
}
你能告訴我們你在哪裏叫你的函數'播音員(播放器:字符)'嗎? – Chajmz
我編輯帖子並添加了這個信息,謝謝。 –