关于游戏里的进度条的实现

green369258 2007-08-26 04:25:07
游戏里面每当你切换场景的时候,都会有loading 的进度条来提示你场景什么时候加载完毕,我想知道他是怎么实现的呢,急需,谢谢!关于进度条的渲染我已经自己写成了,但是不知道怎么加到我的游戏框架里去了,大家指点指点,谢谢了!
...全文
404 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
snake1234 2007-08-29
  • 打赏
  • 举报
回复
楼上的,请不要随便鄙视.涨到90+然后死机,那是因为你机器装载数据的速度慢,跟假不假没关系.

在读取一个大文件,装载大地图数据,渲染一个很大的场景,当没有完成的时候,如何判断进行到那里了?所以分数据段LOAD,每装载完一段,进度条就前进一段,是合理的做法.

所以完全真实的进度条是不现实的,当然也有办法,但是当装载已经很慢的时候,来做这些动作,让装载速度变的更慢,是不能接受的.
72193 2007-08-28
  • 打赏
  • 举报
回复
还使用整数吧!不会访问异常吧?
green369258 2007-08-28
  • 打赏
  • 举报
回复
如果想做进度条是要必须开线程么?
alps_008 2007-08-28
  • 打赏
  • 举报
回复
真实的进度条看着漂亮啊,最鄙视那些假的进度条了,动不动涨到90%+然后跟死机了一样的不动弹。。。
war3的大的RPG地图读取就是最典型的例子,不过人家分开模块来划分进度条倒也可以说的过去吧还算。但是肯定有更好的方法来实现
snake1234 2007-08-26
  • 打赏
  • 举报
回复
还着那么好心...还要按真实的读取来设置进度条啊?

首先;数据分段LOAD,首先是图片资源,然后是音乐资源,如果图片,音乐资源过大,可以拆分读取.最后渲染第一场景的地图等.
每完成一段读取,LOADING图片前进一段.

游戏里面的LOADING进度条都是假的进度,除非你要在中断里面检测读取的真实进度.不过完全没有必要.

green369258 2007-08-26
  • 打赏
  • 举报
回复
我的程序结构不允许边加载东西边进行渲染,开个线程吧,总是指针访问冲突,要不就是只加载不渲染,要不就是只渲染不加载,郁闷呀。怎么才能解决指针的冲突的?
在指点小弟一下吧,谢谢了。
程序用了游戏中的层级的概念,即面向对象的后期绑定方法。
gfxiang 2007-08-26
  • 打赏
  • 举报
回复
比如你load一个文件,如果文件比较大的话,你可能是用一个循环来读这个文件,那么你就可以在这个循环里用当前已读文件的字节数除以文件的大小得到的百分数来设置进度条显示值。
假设你的进度条是用一个类ProgressBar表示
bool load(string filename, ProgressBar& bar)
{
ifstream ifile(filename, ios::binary);
ifile.seekg(0, ios::end);
int size = ifile.tellg(); // 文件大小
ifile.seekg(0, ios::beg);
while (!ifile.eof())
{
ifile.read(...);
// ...
double value = ifile.tellg() / double(size); // 当前已经字节除以文件大小
bar.setvalue(value); // 设置进度条值,一旦进度条值发生改变,通过某种机制通知程序重新渲染进度条
}

// ...

return true;
}

64,692

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧