【发布时间】:2016-01-21 23:54:49
【问题描述】:
我的 Swift 游戏中的 UIButtons 和 UILabels 遇到了一个奇怪的问题。用户在游戏中开始,一旦失败,就会进入游戏结束屏幕。在此游戏结束屏幕上,显示了他们的高分以及返回主菜单或返回玩游戏的两个按钮。这就是问题出现的地方。随机地,每当场景从游戏结束场景切换回游戏场景时,游戏结束场景的按钮和标签有时不会消失。它们作为它们作为游戏其余部分的叠加层的静态表示。
我不知道是什么导致它们大部分时间消失,然后随机决定留在不同的时间。
这是游戏结束场景的代码。到目前为止,我已经尝试使用 .removeFromSuperview()、.alpha = 0 以及现在使用 .hidden = true 的方式删除按钮和标签。这些都不是100%的工作。我已经尝试了所有我能想到的方法,但我不知道是什么导致标签和按钮粘在上面。
import Foundation
import SpriteKit
import UIKit
class endScene : SKScene {
var RestartBtn : UIButton!
var scoreLabel = UILabel()
var highLabel = UILabel()
var menuButton = UIButton()
var Highscore : Int!
var HS : Int!
override func didMoveToView(view: SKView) {
RestartBtn = UIButton(frame: CGRect(x: 0, y: 0, width: view.frame.size.width/3, height: 30))
RestartBtn.center = CGPoint(x: view.frame.size.width / 2, y: view.frame.size.width/1.3)
RestartBtn.setTitle("Restart", forState: UIControlState.Normal)
RestartBtn.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
RestartBtn.addTarget(self, action: Selector("Restart"), forControlEvents: UIControlEvents.TouchUpInside)
menuButton = UIButton(frame: CGRect(x: 0, y: 0, width: view.frame.size.width/3, height: 30))
menuButton.center = CGPoint(x: view.frame.size.width/2, y: view.frame.size.width/4)
menuButton.setTitle("Main Menu", forState: UIControlState.Normal)
menuButton.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
menuButton.addTarget(self, action: Selector("gotoMenu"), forControlEvents: UIControlEvents.TouchUpInside)
self.view?.addSubview(menuButton)
self.view?.addSubview(RestartBtn)
self.scene?.size = CGSize(width: 640, height: 1136)
let bgImage = SKSpriteNode(imageNamed: "Background")
bgImage.zPosition = -1
bgImage.position = CGPointMake(self.size.width/2, self.size.height/2)
self.addChild(bgImage)
let ScoreDefault = NSUserDefaults.standardUserDefaults()
let Score = ScoreDefault.valueForKey("Score") as! NSInteger
let HighscoreDefault = NSUserDefaults.standardUserDefaults()
Highscore = HighscoreDefault.valueForKey("Highscore") as? NSInteger
if (Highscore != nil){
HS = Highscore
}
else {
HS = 0
}
scoreLabel.center = CGPoint(x: view.frame.size.width / 9, y: view.frame.size.width / 4)
scoreLabel.textColor = UIColor.redColor()
scoreLabel.font = UIFont.boldSystemFontOfSize(15)
scoreLabel.font = UIFont(name: "Avenir-Light" , size: 90)
scoreLabel.text = "\(Score)"
scoreLabel.sizeToFit()
highLabel.center = CGPoint(x: view.frame.size.width / 9, y: view.frame.size.width / 2)
highLabel.textColor = UIColor.redColor()
highLabel.font = UIFont.boldSystemFontOfSize(15)
highLabel.font = UIFont(name: "Avenir-Light" , size: 60)
highLabel.text = "\(HS)"
highLabel.sizeToFit()
self.view?.addSubview(scoreLabel)
self.view?.addSubview(highLabel)
}
func Restart(){
running = true
clearendScene()
changeSceneGame()
}
func clearendScene(){
menuButton.hidden = true
scoreLabel.hidden = true
highLabel.hidden = true
RestartBtn.hidden = true
}
func changeSceneGame(){
self.scene!.view!.presentScene(GameplayScene(), transition: SKTransition.crossFadeWithDuration(0.8))
}
func changeSceneMenu(){
self.scene!.view?.presentScene(GameScene(), transition: SKTransition.crossFadeWithDuration(0.8))
}
func gotoMenu(){
clearendScene()
changeSceneMenu()
}
}
This is a screenshot of the overlay bug happening.
This is a screenshot of how the game is supposed to look on the gameplay scene.
【问题讨论】: