Objective c SpriteKit有助于理解缩放
使用SpriteKit制作一个只有肖像的游戏,并将我的图像资源放入Objective c SpriteKit有助于理解缩放,objective-c,sprite-kit,Objective C,Sprite Kit,使用SpriteKit制作一个只有肖像的游戏,并将我的图像资源放入Images.xcasets。这是针对iPhone的,因此我的图像资产的设置如下: 1x, 2x, Retina 4 2x, 3x 例如,在一个图像资源(2x)下,我有一个640x640 png,这非常适合iPhone 4/4s、5/5s,但在6(也可以缩放为2x)上则不适合,因为6在750px(或375点)下有一个稍宽的屏幕。因此,我提出了以下公式,我可以将其传递到我添加到场景中的每个精灵的[mySprite setScale
Images.xcasets
。这是针对iPhone的,因此我的图像资产的设置如下:
1x, 2x, Retina 4 2x, 3x
例如,在一个图像资源(2x)下,我有一个640x640 png,这非常适合iPhone 4/4s、5/5s,但在6(也可以缩放为2x)上则不适合,因为6在750px(或375点)下有一个稍宽的屏幕。因此,我提出了以下公式,我可以将其传递到我添加到场景中的每个精灵的[mySprite setScale:
CGFloat scale = screenPointWidth / (screenScale * 160)
其中screenPointWidth=[[UIScreen mainScreen]bounds].size.width
和screenScale=[[UIScreen mainScreen]scale]
160
指基本1x像素宽度值(或320/2
)。这将返回一个缩放多人游戏
这款多人游戏应用了我的640x640图像缩放,完全适合750宽的屏幕
我的问题:有没有更好的方法来解决这个问题,或者我做得对吗?是否有一个通用的缩放设置我应该使用,或者我应该只是缩放每一个精灵和精灵的位置根据我的公式?或者,我是否应该使用Image.xcsets
而不是创建用于特定屏幕分辨率的单个.atlas?我应该关注上采样和下采样,还是iphone6/6+本身可以神奇地自动处理
参考:iphone6的分辨率足够接近iphone5,因此它要使用2倍的图像 1136 x 640-iphone5 1334 x 750-iphone 6 因为你的背景有640像素高,所以在纵向模式下,它的顶部和底部会缺少一些空间。你需要在较小的设备(iPhone4和5)上用你不介意被切断的区域制作背景。或者你需要在iphone 6上的游戏周围有一个黑色边框。我不建议缩放每个图像 甚至在iphone6出现之前,这也是一个常见的问题。这张图片显示了我在说什么 图像大小 您需要三种图像大小 @2x=iphone4s、5、5s、6(您也可以将其用于非视网膜iPad) @3x(1.5*2x)=iphone 6 PLUS @2x~ipad(2*2x)=ipad视网膜和迷你视网膜 你想如何组织这一切取决于你。在我的游戏中,我把我的图像分成两套地图册。一个用于iPad,一个用于Iphone 我组织地图集的方式 没有后缀的图像适用于非视网膜iPad 在我的代码中,我有一个简单的函数来决定要加载哪个纹理图集
func getTextureAtlas(filename: String) -> SKTextureAtlas {
var name = filename
if UIDevice.currentDevice().userInterfaceIdiom != .Phone {
name = "\(name)-ipad"
}
return SKTextureAtlas(named: name)
}
示例用途:
shipAtlas = getTextureAtlas("ship")
注册iPhone6和“只缩放2倍图像”——它实际上是在放大它们,还是你的意思是2倍图像只适合其中?因为我没有6,所以我用Sim卡来查看事物的外观,而没有任何东西可以缩放,尽管它确实从我的2倍资产中提取(自然)。很抱歉,我误解了你最初的问题。我已经更新了我的答案。我明白了,所以做法是让图像资产更大,以便它们(排序)适合不同的屏幕?在@2x的情况下,我会制作一个1136x640(背景示例),然后将其加载到1024x768和960x640设备上?我认为这是可以接受的图像,可能不太重要,但若你们需要精确的图像,比如说一个棋盘,那个么它必须适合或缩放。在这种情况下,如果我使用640x640棋盘,我可以应用我的公式使精灵精确地适应屏幕,以及缩放x、y位置。你的答案增加了价值,但如果不需要有边框,则必须应用缩放,同意吗?Ray的图像示例(你的链接)将其带回家,谢谢。如果你绝对需要100%的屏幕作为缩放可播放区域,那么我想你需要使用缩放。但在棋盘的情况下,我只需要棋盘所在的背景(桌子或其他东西),而不是可玩区域的一部分。