更改场景会导致缩放

时间:2015-08-10 23:27:25

标签: xcode swift sprite-kit

使用以下代码从GameScene转到PlayScene时,一切正常:

for touch: AnyObject in touches {
            let location = touch.locationInNode(self)
            if self.nodeAtPoint(location) == self.playButton1 {
                var scene = PlayScene(size: self.size)
                let skView = self.view as SKView!
                skView.ignoresSiblingOrder = true
                scene.scaleMode = .ResizeFill
                scene.size = skView.bounds.size
                skView.presentScene(scene)
            }
        }

但是当我使用下面的代码从PlayScene到GameScene时,它会被放大:

if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
            let skView = self.view as SKView!
            skView.ignoresSiblingOrder = true
            scene.scaleMode = .ResizeFill
            scene.size = skView.bounds.size
            skView.presentScene(scene)
        }

尝试更新代码:

var scene = GameScene(size: self.size)
        let skView = self.view as SKView!
        skView.ignoresSiblingOrder = true
        scene.scaleMode = .ResizeFill
        scene.size = skView.bounds.size
        skView.presentScene(scene)
}

为什么?有什么建议吗?

2 个答案:

答案 0 :(得分:0)

在第一个代码段中,您创建了self.size的新场景,其大小与旧场景相同。但在第二个方法中,您使用另一种方法来执行此操作,并且新文件的大小是从文件 GameScene.sks 初始化的,默认情况下大小为1024x768。

修改

你使用过

吗?
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {...}

GameViewController.swift 中创建第一个场景?如果是这样,请尝试用

替换此行

let scene = GameScene(size: view.bounds.size)

我担心你的按钮调整大小(放大)的原因是你第一次加载 GameScene 时它们的大小不合适,实际上它们是在场景大小1024×768。您的按钮被硬编码为400宽度,几乎是场景宽度的1/3(1024pt)。再次加载 GameScene 时,其宽度现在变为屏幕宽度,因此您会发现按钮调整大小。打印scene.size.width以获取更多信息。

答案 1 :(得分:0)

我遇到了同样的问题。 对我来说,问题是当回到第一个场景时,场景大小变得更小了。

场景1)GameMap场景

  • 原始场景尺寸:(1024.0,4096.0)
  • 原始视图尺寸:(320.0,480.0)

场景2)GameLevel场景

  • 原始场景尺寸:(320.0,480.0)
  • 原始视图尺寸:(320.0,480.0)

当从场景1移动到场景2时,一切看起来都很好但是当从场景2移回场景1时#34;场景1和#34;尺寸更改为场景2的尺寸

场景1)GameMap场景 - >回去之后

  • 原始场景尺寸:(320.0,480.0)
  • 原始视图尺寸:(320.0,480.0)

我的解决方案是专门改变" didMoveToView"中的场景大小。并设置"场景1"的scaleMode;见下文:

    self.view?.bounds = CGRectMake(0, 0, Constants.screenWidth, Constants.screenHeight)
    self.scene?.size = CGSizeMake(1024, 4096)

    self.scaleMode = SKSceneScaleMode.AspectFill

希望它有所帮助 BR 芽