仿《雷霆战机》飞行射击手游开发 -- 资源预加载

    绝大多数游戏在启动后首先出现的是一个 “载入中” 的场景,此场景的用处是将游戏所需的图片、音乐、数据等资源从存储卡(或磁盘、闪存)读入内存,这样,后面需要用到这些资源时,可以直接从内存读取,以加快游戏的运行,提高流畅性。下面,就对资源的预加载机制做一个介绍。

资源的类型

预加载的目的是为了后续读取的快捷,所以,一般会预加载那些较大较复杂的文件,例如以下这些:

  • 单张大图:背景大图
  • 合成图:可多幅图片合成的大图,这里我们使用 TexturePacker 合成 plist+png 文件
  • 骨骼动画:使用 Cocos Skeletal Animation Editor 创建的骨骼动画文件,ExportJson+plist+png 文件
  • 场景:使用 Cocos Studio 创建的 csd 文件
  • 声音:ogg 音乐文件
  • 本地数据:游戏存档数据(格式为 json 文件)、游戏配置数据(例如关卡、飞机属性、子弹属性等固定的数据,格式为 sqlite 数据库文件)
  • 远程数据:由于本游戏是弱联网游戏,所以保存在服务器上的数据不多。这里仅仅实现了用户登录、获取时间的功能

下面,我们将逐一介绍不同资源载入的方法。

加载方法

单张大图

  1. 定义 std::vector<std::string> m_imageArray,将需要加载的图片路径放到容器中
  2. 对每个图片逐个调用 Director::getInstance ()->getTextureCache ()->addImageAsync () 函数进行加载,注意他的第二个参数 CC_CALLBACK_1 (Preload::asynLoadingImageDone, this, m_imageArray [i]),当一张图片加载结束后,系统就会调用 Preload::asynLoadingImageDone 函数,同时传入图片的路径作为输入参数。
  3. 在回调函数 asynLoadingImageDone 中,首先要通知界面加载进度,然后根据图片的总数和待加载数判断是否已经全部记载完成,若全部加载成功,则通知 loadingDone (PreloadType::Image)

详细的代码如下所示:

//1、需要加载的png或jpg
    m_imageArray.push_back("BigImg/Bag_Bg.png");
    m_imageArray.push_back("BigImg/BigScreen_Bg.png");
    m_imageArray.push_back("BigImg/Daily_Bg.png");
    m_imageArray.push_back("BigImg/MainUI_Bg.jpg");


void Preload::asynLoadingImage()
{
    //2、将图片加入全局cache中
    m_iImageCnt = m_imageArray.size();
    for (unsigned i = 0; i < m_imageArray.size(); i++)
    {
        Director::getInstance()->getTextureCache()->addImageAsync(
            m_imageArray[i],
            CC_CALLBACK_1(Preload::asynLoadingImageDone, this, m_imageArray[i]));
    }
}

//3、单张图片加载成功后的回调函数
void Preload::asynLoadingImageDone(Texture2D* texture, const std::string& filename)
{
    //通知观察者加载进度
    this->notifyProgress(++m_iTmpProgress);
    m_iImageCnt--;
    //全部加载完成
    if (0 == m_iImageCnt)
    {
        m_bImageLoaded = true;
        this->loadingDone(PreloadType::Image);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾希game

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值