我在测试我的应用时遇到了一个非常奇怪的错误。
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
答案 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)