SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3752|回复: 0
打印 上一主题 下一主题

[terrain] 地形动画中的start_tick_

[复制链接]

21

主题

36

帖子

334

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
334
跳转到指定楼层
楼主
发表于 2020-8-24 16:25:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
何时形成地形动画中的start_tick_?
terrain_builder::load_images,它对每个动画调用“res.start_animation(0, true)”,cycles参数用了“true”,所以地形动画都是周期动画。

start_tick_不是“即时”的
要注意,为提高效率,只有在确时需要加载图像时才会调用terrain_builder::load_images。一旦已经加载过是不会再调用load_images。由于各种地形动画只会被加载一次,后面的加载是不调用load_images,这会导致一种结果,各地形动画的start_tick_是第一次加载时的值,程序运行时间越长,这个start_ticks_距现现在时间就越远。

void animated<T,T_void_value>::update_last_draw_time(double acceleration)中有用当前时间减去start_tick_,即使每个都是100毫秒加,也可以会耗上数十毫秒。一旦地形多了个,这个时间就会到秒级,倒致出严重问题。

系统缓存的start_ticks_是执行load_images时时刻。后面terrain_builder::tile::rebuild_cache拿走的是它的副本,之后在副本上修改不会影响系统缓存中的start_ticks_。

解决办法
  1. terrain_builder::tile::rebuild_cache在生成副本时,立即把start_ticks_改到最新时间。
  2. void terrain_builder::tile::rebuild_cache(const std::string& tod, logs* log)
  3. {
  4.         ......
  5.         img_list.push_back(anim);  // 形成副本
  6.         img_list.back().reset_start_tick(); // 把start_ticks_改到最新时间
  7.         ......
  8. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 03:30 , Processed in 0.045613 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表