加载纹理时动画屏幕

时间:2012-03-19 00:44:46

标签: objective-c ios optimization cocos2d-iphone

我的RPG游戏有随机战斗。当玩家进入随机战斗时,我的游戏必须加载该战斗中使用的纹理(动画怪物,动画等)。纹理非常多,而且相当大(战斗非常耗费图形)。

这样的过程消耗大量时间。当它正在加载时,整个屏幕冻结

游戏地图冻结,等待时间很长 - 我个人觉得很烦人。

我无法预先加载纹理,因为在做了一些数学运算后,我意识到:

  • 如果我在游戏开始时预加载所有纹理,应用程序肯定会崩溃。
  • 如果我在播放器进入地图时预加载特定地图中使用的纹理,则应用程序非常也可能会崩溃。
  • 我只能在需要时加载纹理,并在战斗结束后立即处理它们。

我不想使用“加载屏幕”图片,因为它会影响我的游戏设计和概念。我想避免这种做法。

如果我在加载纹理时可以做某种动画,那就太棒了,这导致了我的问题:这可能吗?你问什么样的动画?好吧,怎么样......你还记得最终幻想曾经在显示加载纹理的同时歪曲屏幕吗?这样的事情。但是,扭曲也是一个非常耗时的过程,所以可能只是一个很酷的逐帧动画或其他东西。

在写这篇文章时,我意识到我可以在纹理之间进行小的暂停(有多个纹理),并且在这样的暂停期间,我更新屏幕以表示动画的状态。但是,这种情况不太可能发生,因为每个纹理都是2048x2048,因此动画会以相当滞后(且令人讨厌)的速率刷新。我也希望避免这种情况。

3 个答案:

答案 0 :(得分:1)

在类似的绑定中,我选择了

  1. 将我的所有动画纹理转换为gzip压缩PVR。加载时间(取决于器件)提高了2到4倍。由转换为PVR引起的任何伪影在运动中都不明显。
  2. 我预装空闲动画(几乎总是开启,除非在技能使用或受伤时。我在战斗场景的淡入期间这样做。我以50毫秒的刻度率控制淡入淡出,并且在每一帧我都会启动一个空闲的预载(最多有8个,它们大约需要20个ms。)。
  3. 我有一个'参与'课程,提前计算整个战斗。当动画变得不需要时,我将其卸载。此外,在“受伤”动画期间,我预取下一个技能动画。
  4. 充满乐趣。祝你的游戏好运。

    PS。不要相信模拟器的实际响应时间。快速转到设备以确定您是否确实存在性能问题。

    PPS。关于第1点,这导致了我的应用程序的显着缩小。

答案 1 :(得分:0)

由于战斗应该是随机的,在战斗发生之前是否有可能为下一场战斗预加载纹理?然后只要装载完成就可以开始战斗。

  1. 游戏决定战斗应该很快发生
  2. 生成随机遭遇(怪物/背景/等?)
  3. 为遭遇
  4. 加载纹理
  5. 纹理加载后开始相遇
  6. 战斗仍然是随机的,只是在用户意识到即将发生战斗之前已经确定了相遇。

答案 2 :(得分:0)

你可以先加载低分辨率的纹理,然后在后台线程中(我认为是NSOperation)开始加载更大的纹理,并在完成后“交换”它们。

对于动画来说,很多游戏都是在玩家远离时加载小纹理开始的,当它们越来越接近时,高分辨率的纹理将会“淡化”