【问题标题】:Changing scene causes zoom改变场景导致缩放
【发布时间】:2015-08-10 23:27:24
【问题描述】:

使用以下代码从 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)
}

怎么会?有什么建议吗?

【问题讨论】:

    标签: xcode swift sprite-kit


    【解决方案1】:

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


    编辑:

    你用了吗

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

    GameViewController.swift 中创建您的第一个场景?如果是这样,请尝试将这一行替换为

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

    恐怕您的按钮被调整大小(缩放)的原因是它们在您第一次加载 GameScene 时的大小不合适,实际上它们位于大小为 1024x768 的场景中。您的按钮被硬编码为 400 宽度,几乎是场景宽度 (1024pt) 的 1/3。当您再次加载 GameScene 时,它的宽度现在变为屏幕宽度,因此您会发现按钮的大小已调整。打印scene.size.width 了解更多信息。

    【讨论】:

    • 请再问一个简单的问题,知道为什么我的按钮是透明的吗?看看这个:pastebin.com/7fHHmjqV
    • @Eri-Sklii 添加background.zPosition = -1.0 使您的按钮处于比背景更高的级别。两者的默认zPosition 都是0.0,因此您的按钮变得透明,被alpha=0.5 背景覆盖。
    • 啊我忘了zPosition。非常感谢你的帮助! :)
    • 我有同样的问题,但我以更简单的方式在场景之间转换,我从游戏场景转到 StartMenu 场景,在开始菜单上,一切都放大并变大任何帮助请我的游戏场景 TouchesBegane功能。如果 gamePlay == false { let scene = StartMenu(size: (view?.bounds.size)!) let skView = self.view! skView.presentScene(scene) self.scaleMode = SKSceneScaleMode.aspectFill } 有什么帮助吗?
    【解决方案2】:

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

    场景 1) 游戏地图场景

    • 原始场景大小:(1024.0, 4096.0)
    • 原始视图大小:(320.0, 480.0)

    场景 2) 游戏关卡场景

    • 原始场景大小:( 320.0, 480.0)
    • 原始视图大小:(320.0, 480.0)

    当从场景 1 移动到场景 2 时,一切看起来都很好,但是当从场景 2 移动回场景 1 时,“场景 1”的大小更改为场景 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 芽

    【讨论】:

      猜你喜欢
      • 2021-11-05
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      相关资源
      最近更新 更多