2014-10-17 78 views
0

我在基本SpriteKit模板的第一个屏幕中添加了一个精灵。但是,无论何时我进入播放场景并返回到菜单场景,图像都会放大。在检查大小和缩放模式后,一切似乎都正常。我不确定为什么会发生这种情况。Swift Spritekit在呈现新场景后自行调整图像大小

这是菜单代码:

enter image description here

这是从一个场景返回菜单代码:移动到下一个场景前

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) 
    } 
} 

} 

这是回到视图后的图像,它比以前的图像稍大。

enter image description here

我需要的图像保持不变,不管用户从游戏菜单中有多少次去。

回答

0

我只能想到两件事情可能导致此:

  1. 在你的viewController,您可能已经改变菜单的场景anchorPoint,当你回到菜单中,您没有设置它作为它在viewController中设置的相同的东西。

  2. 您可能需要使用.ResizeFill而不是.AspectFill

每次我遇到过这个问题,这是这些因之一。