Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用scaleMode.AspectFit时如何更改SKView信箱颜色_Ios_Swift_Sprite Kit - Fatal编程技术网

Ios 使用scaleMode.AspectFit时如何更改SKView信箱颜色

Ios 使用scaleMode.AspectFit时如何更改SKView信箱颜色,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在使用样板代码(新游戏iOS项目)中的标准全屏SpriteKit视图,当我使用 scene.scaleMode = .AspectFit 为确保场景合适,剩余(字母框)区域用黑色表示 我尝试了以下选项来更改颜色: let skView = self.view as SKView // was hoping this one would work skView.backgroundColor = UIColor.redColor() // didn't expect this would

我正在使用样板代码(新游戏iOS项目)中的标准全屏SpriteKit视图,当我使用

scene.scaleMode = .AspectFit
为确保场景合适,剩余(字母框)区域用黑色表示

我尝试了以下选项来更改颜色:

let skView = self.view as SKView

// was hoping this one would work
skView.backgroundColor = UIColor.redColor()

// didn't expect this would work, since scene is scaled anyways
scene.backgroundColor = SKColor.redColor()
还尝试将脚本编辑器中的SKView背景颜色更改为其他颜色,但没有成功


关于在何处更改信盒区域的颜色,有什么建议吗?

我认为这应该是一种设置颜色或在信头的耳朵中放置精灵的方法。。。但似乎没有。另外,我不同意LearnCos2D。AspectFit没有问题。它有它的用处

我所做的是使用AspectFit,但也根据屏幕大小计算场景的大小。这对OSX游戏没有多大帮助,但在iOS上也可以

func createScene() -> GameScene {
    let screenSize  = UIScreen.mainScreen().bounds.size
    var size:CGSize = CGSizeZero

    size.height = Constants.sceneHeight
    size.width  = screenSize.width * (size.height / screenSize.height);


    return GameScene(size: size)
}

override func viewDidLoad() {
    super.viewDidLoad()

    let scene = self.createScene()

    // Configure the view.
    let skView = self.view as SKView
    skView.showsFPS = false
    skView.showsNodeCount = false

    /* Sprite Kit applies additional optimizations to improve rendering performance */
    skView.ignoresSiblingOrder = true

    /* Set the scale mode to scale to fit the window */
    scene.scaleMode = .AspectFit

    skView.presentScene(scene)
}

渲染场景后,其内容将复制到显示视图中。如果视图和场景大小相同,则可以将内容直接复制到视图中。如果两者不同,则场景将缩放以适合视图。scaleMode属性确定内容的缩放方式

字母盒是在视图中创建的,因此无法绕过它。也就是说,如果要使用特定的场景大小和通用坐标系,通常需要.aspectFit设置。如果这是您的情况,以下内容应该会有所帮助

您需要计算出一个standard.aspectFit需要多少填充才能从当前设备中删除字母框并将其添加到场景中。完成时,场景比原始大小稍大或稍宽,但场景的大小至少与原始场景大小相同。然后,您可以将主播点移动到原始(0,0)坐标或(0.5,0.5)坐标,具体取决于您希望在游戏中使用的坐标系

这方面的代码很复杂,可能会随着时间而变化。如果你想快速修复,我创建了一个框架,正是为了这个目的。它很小但便于携带:)

只是:

  • 下载存储库的ZIP文件
  • 打开“SceneSizer”子文件夹
  • 在项目中拖动SceneSizer.framework“乐高积木”
  • 确保框架是嵌入的,而不仅仅是链接的
  • 将框架导入代码中的某个位置
    Import SceneSizer
  • 完成后,现在可以使用以下命令调用sizer类:
    SceneSizer.calculateSceneSize(#initialSize:CGSize,desiredWidth:CGFloat,desiredHeight:CGFloat)->CGSize


    文档位于文件夹中,以便在标准场景中完全干净地使用。希望这有帮助

    我怀疑这是可能的,因为aspectfit显然是最后的解决方案。作为开发人员,您应该正确支持所有分辨率,如果需要,您可以通过添加相应的边界节点/精灵来“手动”信箱。啊哈,我通过每次在CreateSecene()方法中切换“高度”和“宽度”来实现这一点,该方法将游戏场景宽度锁定为限制因子,即我的情况下的宽度。(我把信箱放在顶部和底部,而不是左侧和右侧。)当然,只是练习一下如何创建框架,并保留一个版本。因此,如果我对其进行版本升级,人们只需插入较新版本作为框架,比插入几个文件更容易。。