Spritekit 场景内容被放大

Posted

技术标签:

【中文标题】Spritekit 场景内容被放大【英文标题】:Spritekit Scene content is zoomed in 【发布时间】:2017-08-06 10:41:08 【问题描述】:

我正在以编程方式从视图控制器(将difficulty 字符串传递给它)呈现游戏控制器/游戏场景,如下所示:

class GameController: UIViewController 

    var difficulty: String!

    override func loadView() 

        self.view = SKView(frame: UIScreen.main.bounds)
    

    override func viewDidLoad() 
        super.viewDidLoad()

        let skView = self.view as! SKView

        let scene = GameScene(size: view.frame.size)
        // Set the scale mode to scale to fit the window
        scene.scaleMode = .aspectFill
        scene.difficulty = difficulty
        // Present the scene
        skView.presentScene(scene)

        skView.ignoresSiblingOrder = true
    

但是当场景出现在屏幕上时,所有内容都被“放大”了(SKSpriteNodes、SKLabels 等)

有人知道如何解决这个问题吗?

非常感谢。

PS:通过 SKS 演示可以正常工作,只是在 iPad 上SKLabel 定位存在问题。这种方法的问题是我无法找到如何通过 SKS 将我的自定义变量 difficulty 传递给场景,即使我在 Storyboard 中将其自定义类更改为我的,所以也应该这样做。

【问题讨论】:

【参考方案1】:

您在这里确实有 2 个问题。首先是我当前的设置有什么问题,其次我可以使用 sks 文件并仍然传递数据。

回答第二个问题,是的

if let gameScene = GameScene(fileNamed: "GameScene") 

    self.gameScene = gameScene
    self.gameScene.stage = 1
    self.gameScene.setupBasedOnStage()
    self.gameScene.scaleMode = .aspectFill
    self.view?.presentScene(self.gameScene, transition: SKTransition.reveal(with: .down, duration: 1.0))

您可以在显示页面(在本例中为舞台)之前设置任何自定义属性,如果需要,您可以调用设置函数来加载基于舞台的信息/图形。

我在我的场景中使用 sks 文件并一直这样设置它们。

【讨论】:

嘿@Ron 感谢您的回复,但在演示 SKS 时,我无法访问我的 SKScene 类(在我的 SKS 文件中设置为自定义类)中的 var difficulty: String!。有什么特别的设置吗? 变量设置在哪里?在类内部但在函数外部?是否设置为私有?可能会在您的问题中发布一些场景类文件。此外,如果您将字符串设置为 var难度 = "" 您避免将其视为可选 .aspectFill 帮我做

以上是关于Spritekit 场景内容被放大的主要内容,如果未能解决你的问题,请参考以下文章

在 SpriteKit 项目中包含一个 UIKit 小游戏

Spritekit中的新场景没有显示任何内容?

在 Spritekit 中更改场景,检测按钮上的触摸

SpriteKit:检测当新场景显示以后

Swift和Spritekit sceneDidLoad被调用多个

子类化使用 SpriteKit .sks 场景文件创建的 SKNode