spriteKit 的背景超出 phone IOS 的框架
Background of spriteKit exceeds the frame of the phone IOS
我很难理解不同设备上的分辨率是如何工作的。所以我所做的是将背景图像制作成 1024 x 768,然后在 iphone 5 设备上进行测试。当我 运行 它时,屏幕的下半部分被切掉,就像顶部一样。我确实使用 AspectFill 作为我的缩放模式,但即使我在 iphone 6 或 6+ 上测试它,背景仍然被切断。
以下是我的 gameviewcontroller 代码
import UIKit
import SpriteKit
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let scene = GameScene(size: CGSize(width: 1024, height: 768))
let skView = self.view as! SKView
skView.multipleTouchEnabled = true
if GameSettings.Debugging.ALL_TellMeStatus {
skView.showsFPS = GameSettings.Debugging.ALL_ShowFrameRate
skView.showsNodeCount = GameSettings.Debugging.ALL_ShowNodeCount
skView.showsDrawCount = GameSettings.Debugging.IOS_ShowDrawCount
skView.showsQuadCount = GameSettings.Debugging.IOS_ShowQuadCount
skView.showsPhysics = GameSettings.Debugging.IOS_ShowPhysics
skView.showsFields = GameSettings.Debugging.IOS_ShowFields
}
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
_ = SGResolution(screenSize: view.bounds.size, canvasSize: scene.size)
skView.presentScene(scene)
}
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return .Landscape
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Release any cached data, images, etc that aren't in use.
}
override func prefersStatusBarHidden() -> Bool {
return true
}
}
以及我添加背景图片的代码。
let background = SKSpriteNode(imageNamed: "Artboard 1")
background.posByCanvas(0.5, y: 0.5)
background.xScale = 1.2
background.yScale = 1.2
background.size = self.frame.size
background.zPosition = -1
addChild(background)
这是启动屏幕尺寸的正确方法还是我应该从 iPad 屏幕尺寸开始然后对其进行除垢?如果有人能指导我如何解决这个问题,那就太好了!!
宽高比填充将切掉部分背景。
您的场景的纵横比为 4:3
您的设备的纵横比为 16:9
AspectFill
将以当前纵横比 (4:3) 缩放您的场景,直到最远的边界被填满,从而使整个视图显示场景并且没有黑色边框;
AspectFit
将缩放直到填满最近的边框,这将为您提供黑条以保持纵横比。
如果你不想保留 4:3,那么你可以使用 .Fill
,这当然会让你的精灵在 16:9 上变得更胖,因为它只会拉伸场景直到它击中所有 4 个边界
最后你有 .ResizeFill
,它所做的是调整场景边界的大小以匹配你的屏幕大小,所以如果你从 1024x768 场景开始,当你查看它时它会变成 736x414 场景在 iPhone 6+ 上(这是因为我们以点而不是像素为单位工作,像素数将为 x3(因此为 2208x1242),硬件将缩小到 1920x1080)。
您需要退后一步,评估您希望您的游戏在 3 种不同的纵横比下呈现的效果
16:9、3:2 和 4:3,并确定以上 4 种方法中哪一种最适合您。
现在在我看来,我发现纵横比填充效果最好,我只是计划 16:9 纵横比,确保我没有在可能被裁剪的区域放置任何重要信息游戏,但这并不适用于所有人,不幸的是没有人可以在这部分帮助您,因为这是您的游戏,您是决定其外观和感觉的人。
我很难理解不同设备上的分辨率是如何工作的。所以我所做的是将背景图像制作成 1024 x 768,然后在 iphone 5 设备上进行测试。当我 运行 它时,屏幕的下半部分被切掉,就像顶部一样。我确实使用 AspectFill 作为我的缩放模式,但即使我在 iphone 6 或 6+ 上测试它,背景仍然被切断。
以下是我的 gameviewcontroller 代码
import UIKit
import SpriteKit
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let scene = GameScene(size: CGSize(width: 1024, height: 768))
let skView = self.view as! SKView
skView.multipleTouchEnabled = true
if GameSettings.Debugging.ALL_TellMeStatus {
skView.showsFPS = GameSettings.Debugging.ALL_ShowFrameRate
skView.showsNodeCount = GameSettings.Debugging.ALL_ShowNodeCount
skView.showsDrawCount = GameSettings.Debugging.IOS_ShowDrawCount
skView.showsQuadCount = GameSettings.Debugging.IOS_ShowQuadCount
skView.showsPhysics = GameSettings.Debugging.IOS_ShowPhysics
skView.showsFields = GameSettings.Debugging.IOS_ShowFields
}
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
_ = SGResolution(screenSize: view.bounds.size, canvasSize: scene.size)
skView.presentScene(scene)
}
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return .Landscape
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Release any cached data, images, etc that aren't in use.
}
override func prefersStatusBarHidden() -> Bool {
return true
}
}
以及我添加背景图片的代码。
let background = SKSpriteNode(imageNamed: "Artboard 1")
background.posByCanvas(0.5, y: 0.5)
background.xScale = 1.2
background.yScale = 1.2
background.size = self.frame.size
background.zPosition = -1
addChild(background)
这是启动屏幕尺寸的正确方法还是我应该从 iPad 屏幕尺寸开始然后对其进行除垢?如果有人能指导我如何解决这个问题,那就太好了!!
宽高比填充将切掉部分背景。
您的场景的纵横比为 4:3
您的设备的纵横比为 16:9
AspectFill
将以当前纵横比 (4:3) 缩放您的场景,直到最远的边界被填满,从而使整个视图显示场景并且没有黑色边框;
AspectFit
将缩放直到填满最近的边框,这将为您提供黑条以保持纵横比。
如果你不想保留 4:3,那么你可以使用 .Fill
,这当然会让你的精灵在 16:9 上变得更胖,因为它只会拉伸场景直到它击中所有 4 个边界
最后你有 .ResizeFill
,它所做的是调整场景边界的大小以匹配你的屏幕大小,所以如果你从 1024x768 场景开始,当你查看它时它会变成 736x414 场景在 iPhone 6+ 上(这是因为我们以点而不是像素为单位工作,像素数将为 x3(因此为 2208x1242),硬件将缩小到 1920x1080)。
您需要退后一步,评估您希望您的游戏在 3 种不同的纵横比下呈现的效果
16:9、3:2 和 4:3,并确定以上 4 种方法中哪一种最适合您。
现在在我看来,我发现纵横比填充效果最好,我只是计划 16:9 纵横比,确保我没有在可能被裁剪的区域放置任何重要信息游戏,但这并不适用于所有人,不幸的是没有人可以在这部分帮助您,因为这是您的游戏,您是决定其外观和感觉的人。