【问题标题】:How to load different sprite sheets on different devices with Sprite Kit?如何使用 Sprite Kit 在不同设备上加载不同的精灵表?
【发布时间】:2013-11-19 12:16:46
【问题描述】:

我正在使用 Sprite Kit 开发游戏。我希望它能够自动使用 iPhone、iPad 和大型 iPhone 版本所需的纹理。

假设我有:
player01-568h.png - player-10-568h.png
player01@2x.png - player-10@2x.png
player01-ipad.png - player-10-ipad.png
player01-ipadhd.png - player-10-ipadhd.png

如何存储这些?
我是否需要为每个图集提供单独的图集?
每次我需要加载图集和加载需要时检查设备,还是有任何自动方式?

【问题讨论】:

  • 那么问题是如何检测不同的硬件?看看这个:stackoverflow.com/questions/2862140/…
  • @juniperi 不,问题是如何避免检测不同硬件的 if 语句。像在常规 iOS 上一样,使常规图像和 2x 图像自动工作。
  • 遵守 Apple 资源文件名约定,这将是自动的,摘要参见:vigorouscoding.com/2012/03/… 我相信您需要创建一个单独的图集,其中 atlas 文件夹具有按照约定的后缀,但是包含的文件不使用任何后缀。

标签: ios objective-c sprite-kit


【解决方案1】:

我找到了一个有用的方法,它可以为当前设备返回正确的纹理图集。

指定

#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON ) 

在场景顶部添加这个方法:

- (SKTextureAtlas *)textureAtlasNamed:(NSString *)fileName {
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {

        if (IS_WIDESCREEN) {
            // iPhone Retina 4-inch
            fileName = [NSString stringWithFormat:@"%@-568", fileName];
        } else {
            // iPhone Retina 3.5-inch
            fileName = fileName;
        }

    } else {
        fileName = [NSString stringWithFormat:@"%@-ipad", fileName];
    }

    SKTextureAtlas *textureAtlas = [SKTextureAtlas atlasNamed:fileName];

    return textureAtlas;
}

现在您需要做的就是正确命名纹理图集。

iPhone 3.5 英寸:MyAtlas.atlas

iPhone 4 英寸:MyAtlas-568.atlas

iPad:MyAtlas-ipad.atlas

抱歉,不记得我在哪里得到的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多