swift 背景颜色 + button/image 错误
swift background color + button/image bug
我刚刚在测试我的应用程序时遇到了一个非常奇怪的错误。
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)
然后错误没有发生并且背景设置正常,所以我知道这段代码有问题,并假设由于某种原因它在我的图像上放大了(不能 post 没有10 声望...)
然而,在尝试调整大小和修复此问题之后,实际上没有任何帮助,但我仍然不禁认为这是一个相对简单的解决方案,只是这段代码在我之前的场景中使用没有任何问题。
有什么建议吗?
编辑:我确信它采用了我的图像的颜色并将其用作背景,并将整个背景设为重启按钮,我只是用另一个样式不同的图像进行了尝试。
编辑 2:图像大小 = 200x80,我在第一次编辑中使用的图像已缩小到 40x80
这不是错误,所以 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)
我刚刚在测试我的应用程序时遇到了一个非常奇怪的错误。
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)
然后错误没有发生并且背景设置正常,所以我知道这段代码有问题,并假设由于某种原因它在我的图像上放大了(不能 post 没有10 声望...)
然而,在尝试调整大小和修复此问题之后,实际上没有任何帮助,但我仍然不禁认为这是一个相对简单的解决方案,只是这段代码在我之前的场景中使用没有任何问题。
有什么建议吗?
编辑:我确信它采用了我的图像的颜色并将其用作背景,并将整个背景设为重启按钮,我只是用另一个样式不同的图像进行了尝试。
编辑 2:图像大小 = 200x80,我在第一次编辑中使用的图像已缩小到 40x80
这不是错误,所以 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)