我在基本SpriteKit模板的第一个屏幕上添加了一个精灵。但是,每当我进入播放场景并返回菜单场景时,图像就会被放大。检查尺寸和比例模式后,一切似乎都正常。我不确定为什么会这样。
这是菜单的代码:
let playButton = SKSpriteNode(imageNamed: "play")
override func didMoveToView(view: SKView)
{
/* Setup your scene here */
//Place button in exact middle of the screen
self.playButton.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
addChild(self.playButton)
self.backgroundColor = UIColor.blueColor()
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
{
/* Called when a touch begins */
for touch: AnyObject in touches
{
let location = touch.locationInNode(self)
if self.nodeAtPoint(location) == self.playButton
{
var scene = PlayJumper()
let sKView = self.view as SKView!
sKView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
scene.size = sKView.bounds.size
sKView.presentScene(scene)
}
}
}
移动到下一个场景之前的场景截图:
这是从下一个场景返回菜单的代码,以及返回到屏幕后更改的图像。
import SpriteKit
class PlayJumper : SKScene
{
override func didMoveToView(view: SKView){
self.backgroundColor = UIColor.orangeColor()
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
{
for touch: AnyObject in touches
{
endGame()
}
}
func endGame()
{
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene
{
let sKView = self.view as SKView!
sKView.ignoresSiblingOrder = true
scene.size = sKView.bounds.size
scene.scaleMode = .AspectFill
sKView.presentScene(scene)
}
}
}
这是移回视图后的图像,它略大于上一张图像。
无论用户从游戏进入菜单多少次,我都需要图像保持不变。
答案 0 :(得分:1)
我只能想到可能导致这种情况的两件事:
在viewController中,您可能已经更改了菜单的场景anchorPoint,当您返回菜单时,您不会将其设置为与viewController中设置相同的内容。
您可能希望使用.ResizeFill而不是.AspectFill
每次我遇到这个问题,都是因为其中一个。