
160
|
第
5
章
讨论
对于游戏而言,读取文件有两种主要方式:
•
文件中包含的信息需要在内存中保持完整,因为每次我们都需要所有内容(例
如纹理图片、关卡布局,以及某些声音文件)。
•
文件中包含大量信息,但每次只需要读取一小部分数据(例如,怪物的数据,
玩家信息,任务对话等)。
当从大文件中读取少量数据时,数据库确实更快、更高效,但缺点是增加了代码的
复杂性。
5.6
管理资源集
问题
游戏中有大量大文件,我们想在后台加载它们,这样就不会让主线程变慢。
解决方案
新建一个
AssetLoader
类。在
AssetLoader.swift
中编写如下代码:
class AssetLoader: NSObject {
//
为了方便,我们定义一个元组,用于代表已加载的资源。
//
元组中包含有已加载的资源的
URL
、
//
数据和一个
NSError
对象
typealias LoadingResult = (url: URL, data: Data?, error: Error?)
//
同时定义一个加载结果处理函数,接收一个
URL
参数,
//
以及一个
Data
参数或
Error
参数
typealias LoadingResultHandler = (URL, Data?, Error?) -> Void
class func loadAssets(at urls: [URL],
withEnumerationBlock loadingComplete: @escaping LoadingResultHandler) ...