我正在创建我的第一个Swift + SpriteKit游戏,并且我不得不根据iDevice调整所有内容的大小而感到头疼。
我有一个基于其运行的设备的类,返回它的名称。有了该名称,我创建了一个基于设备字符串名称的字典,该字典返回该给定设备的分辨率。
然后我创建了2个函数-> getSizeBasedOnDevice()和getPositionBasedOnDevice()
自从我为iPhone 6S编写游戏代码以来。我以为获得所有这些大小和位置就像进行简单的数学计算一样容易,但是看起来并非如此。
这些是我的功能:
func getSizeBasedOnDevice(width: CGFloat, height: CGFloat) -> CGSize {
// iPhone 6s w: 375, h: 667
let deviceName = UIDevice.currentDevice().modelName
let iphoneNative = ScreenSize(width: 375, height: 667)
let resolution = Resolutions[deviceName]
let newWidth = (CGFloat(resolution!.getWidth()) * width ) / iphoneNative.getWidth()
let newHeight = (CGFloat(resolution!.getHeight()) * height) / iphoneNative.getHeight()
return CGSize(width: newWidth, height: newHeight)
}
func getPositionBasedOnDevice(x: CGFloat, y: CGFloat) -> CGPoint {
let deviceName = UIDevice.currentDevice().modelName
let iphoneNative = ScreenSize(width: 375, height: 667)
let resolution = Resolutions[deviceName]
let newX = (CGFloat(resolution!.getWidth()) * x) / iphoneNative.getWidth()
let newY = (CGFloat(resolution!.getHeight()) * y) / iphoneNative.getHeight()
return CGPoint(x: newX, y: newY)
}
我的iPhoneNative高度和宽度将是我的iPhone 6S'。因此,计算对我来说很简单,但事实并非如此。
因此,具有以下示例值:
Asset's width = 100 pts
Current Device (iPhone 4S) width = 320 pts
Originally designed Device (iPhone 6S) width = 375 pts
数学将是:
(320 * 100)/ 375 = 85.33
因此,在我的iPhone 6S上宽度为100磅的资产在iPhone 4S上的宽度为85.33。
首先,我认为这似乎很好,但是从结果来看,我发现自己做错了。
谁能给我一个提示吗?
提前致谢。
让我阻止你:)
我了解您的困难,这不是针对不同屏幕尺寸构建游戏的正确方法。
您只应该考虑Scene
。
然后打开GameViewController.swift
并寻找这条线
scene.scaleMode = .AspectFill
该行确实允许您定义场景在屏幕上的表示方式(这对于处理不同的屏幕尺寸尤为重要)。
您有4个选择
.Fill
:缩放SKScene
以填充整个SKView
。.AspectFill
:缩放,SKScene
以SKView
在保留场景的高宽比的同时填充。如果视图具有不同的宽高比,则可能会发生某些裁剪。.AspectFit
:缩放SKScene
以适合,SKView
同时保留场景的宽高比。如果视图具有不同的宽高比,则可能会发生一些黑框现象。.ResizeFill
:修改SKScene
的实际大小以完全匹配SKView
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句