快速背景颜色+按钮/图像错误

时间:2015-05-16 01:27:38

标签: ios image swift debugging background

我在测试我的应用时遇到了一个非常奇怪的错误。

import Foundation
import SpriteKit
import AVFoundation

class EndScene : SKScene {

var Highscore : Int!
var ScoreLabel : UILabel!
var HighscoreLabel : UILabel!
var AudioPlayer = AVAudioPlayer()

override func didMoveToView(view: SKView) {

    scene?.backgroundColor = UIColor.grayColor()

    var EndGameMusic = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("endSong", ofType: "wav")!)
    AudioPlayer = AVAudioPlayer(contentsOfURL: EndGameMusic, error: nil)
    AudioPlayer.prepareToPlay()
    AudioPlayer.play()

    var scoreDefault = NSUserDefaults.standardUserDefaults()
    var Score = scoreDefault.valueForKey("Score") as! NSInteger

    var HighscoreDefault = NSUserDefaults.standardUserDefaults()
    Highscore = HighscoreDefault.valueForKey("Highscore") as! NSInteger

    NSLog("\(Highscore)")

    ScoreLabel = UILabel(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 30))
    ScoreLabel.center = CGPoint(x: view.frame.size.width, y: view.frame.size.width/4)
    ScoreLabel.text = "Last Game:\(Score)"
    self.view?.addSubview(ScoreLabel)

    HighscoreLabel = UILabel(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 30))
    HighscoreLabel.center = CGPoint(x: view.frame.size.width, y: view.frame.size.width/2)
    HighscoreLabel.text = "Highscore: \(Highscore)"
    self.view?.addSubview(HighscoreLabel)

    let RestartBtn = SKSpriteNode(imageNamed: "RestartBtn")
    RestartBtn.position = CGPointMake(size.width/2, size.height/2)
    RestartBtn.name = "Restart"
    addChild(RestartBtn)
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        /* Called when a touch begins */
        for touch: AnyObject in touches {
            let touchLocation = touch.locationInNode(self)
            let touchedNode = self.nodeAtPoint(touchLocation)
            if(touchedNode.name == "Restart"){
                Restart()
            }
        }
}
func Restart(){
    self.view?.presentScene(InGame(), transition: SKTransition.crossFadeWithDuration(0.3))
    HighscoreLabel.removeFromSuperview()
    ScoreLabel.removeFromSuperview()
}
}

当调用这个场景时,会出现两个标签,即高分和分数,但我的背景会变成黄色,我用作按钮的图像不存在,但如果我触摸任何地方在屏幕上(无论边界,我已经尝试过)它会激活按钮并退出。

如果我删除此代码:

let RestartBtn = SKSpriteNode(imageNamed: "RestartBtn")
RestartBtn.position = CGPointMake(size.width/2, size.height/2)
RestartBtn.name = "Restart"
addChild(RestartBtn)

然后错误没有发生,背景设置正常,所以我知道这个代码存在问题,并且假设由于某种原因它放大了我的图像(没有10个声誉的无法发布...)

然而,在所有尝试调整和修复此问题之后,没有任何实际帮助,但我仍然无法帮助认为这有一个相对简单的解决方案,只是这个代码在我以前的场景中使用没有任何问题。

任何建议?

编辑:我确信它采用了我的图像颜色并将其用作背景,并使整个背景成为重启按钮,我只是尝试了另一种风格不同的图像。

编辑2:图像尺寸= 200x80,我在第一次编辑中使用的图像缩小为40x80

1 个答案:

答案 0 :(得分:0)

这不是一个错误,所以基本上SKSpriteNode的工作方式是它们采用图像文件的大小,因为你没有在其他任何地方明确设置大小。从你的代码中,我猜你的图像超过1000 x 1000像素,所以它占据了整个屏幕。例如,iPhone 6的尺寸类似于xCode中的667 x 375像素,所以在某种意义上你的重启按钮实际上比屏幕大。要解决此问题,请将xScale和yScale值设置为低,并查看哪些值有效(使精灵的大小更小)

RestartBtn.xScale = 0.01
RestartBtn.yScale = 0.01

这会使按钮缩小100倍(或之前尺寸的1/100),只需使用这些值,直到获得您喜欢的尺寸。

编辑:所以我之前也在spriteKit中遇到过这个问题。由于某些原因,除非您在声明场景的位置设置其大小,否则屏幕的大小会搞乱。

(What you called your screen).size = skView.bounds.size

例如,如果你喜欢

let skView = self.view as SKView!
myScene = GameScene()
myScene.size = skView.bounds.size
skView.presentScene(myScene)