Ios 使用scaleMode.AspectFit时如何更改SKView信箱颜色
我正在使用样板代码(新游戏iOS项目)中的标准全屏SpriteKit视图,当我使用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
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)坐标,具体取决于您希望在游戏中使用的坐标系 这方面的代码很复杂,可能会随着时间而变化。如果你想快速修复,我创建了一个框架,正是为了这个目的。它很小但便于携带:) 只是:
Import SceneSizer
SceneSizer.calculateSceneSize(#initialSize:CGSize,desiredWidth:CGFloat,desiredHeight:CGFloat)->CGSize
文档位于文件夹中,以便在标准场景中完全干净地使用。希望这有帮助 我怀疑这是可能的,因为aspectfit显然是最后的解决方案。作为开发人员,您应该正确支持所有分辨率,如果需要,您可以通过添加相应的边界节点/精灵来“手动”信箱。啊哈,我通过每次在CreateSecene()方法中切换“高度”和“宽度”来实现这一点,该方法将游戏场景宽度锁定为限制因子,即我的情况下的宽度。(我把信箱放在顶部和底部,而不是左侧和右侧。)当然,只是练习一下如何创建框架,并保留一个版本。因此,如果我对其进行版本升级,人们只需插入较新版本作为框架,比插入几个文件更容易。。