【问题标题】:Loading assets in iOS在 iOS 中加载资产
【发布时间】:2013-08-20 13:05:59
【问题描述】:

我正在开发一款游戏,到目前为止,我的资产像往常一样放在 XCode 项目中,但我想知道是否可以在运行时加载它们,但我不知道该怎么做.我正在使用 parse.com 服务,因此实际上在线存储资产并加载它们很好,但是对于正在编译的项目,它是如何工作的?还是 XCode 项目知道资产在加载后实际上是程序的一部分?

【问题讨论】:

  • 所以你想将你的资产存储在 bundle 中?还是想从服务器下载资产?
  • 从服务器下载。

标签: ios xcode assets parse-platform


【解决方案1】:

当资产是应用程序包的一部分时,它们加起来就是 IPA 文件的大小。在 OTA 的情况下,IPA 的大小很重要。目前为OTA size limit is 50MB。对于游戏而言,资产大小通常会达到数百 MB,这将限制从应用商店进行 OTA 下载。

因此,应用程序会在首次运行游戏时下载所需的资源并将它们存储在磁盘上。对于这种方法,应用程序需要实现具有恢复能力(用于错误处理或部分下载场景)和缓存技术的资产下载模块。

捆绑资产
要访问捆绑的资源,您需要使用类似于

的代码
NSString *imgBundlePath=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"someimage.png"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:imgBundlePath];

下载的资源
当应用程序从服务器下载资源时,下载的文件需要存储在应用程序目录中。它们不能存储在捆绑包中,因为它在设备上安装后是只读的。访问这些文件的代码是

// Assuming downloaded assets are stored in NSCachesDirectory
NSArray *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *imgPath = [[cachePath lastObject] stringByAppendingPathComponent:@"someimage.png"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:imgBundlePath];

希望我已经回答了你的问题。

【讨论】:

  • 我对下载的选项很感兴趣,但是你说它们是在游戏第一次运行时存储的,但是App Store上的很多游戏,似乎每次运行时都会加载资源?他们没有存储它们吗?
  • @Phil IMO,每次运行下载资产都会对用户体验造成一点影响,而且每次玩数据下载都会产生费用,而且游戏无法玩,除非有数据连接。这有点令人反感。
【解决方案2】:

如果是图片资源,您可以使用Coredata 作为后端并将图片存储为 blob 类型。如果您想频繁更新图片或需要按需加载图片,可以将图片保存在服务器中,使用SDWebImage library下载或显示。

如果您计划按需加载图像,那么您的应用将需要互联网连接才能工作。

现在由您来决定架构:)

【讨论】:

    猜你喜欢
    • 2019-11-27
    • 2021-08-10
    • 2020-09-14
    • 2019-08-06
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多