作者darkflier (我不要变小胖Orz)
看板GameDesign
标题Re: [程式] 点阵图和记忆体
时间Sat Nov 22 18:44:32 2008
我个人提供两个懒惰的方法
首先把你会读入的档案数量以及个档案大小汇出成两档案
binary with xml( extenable file format )
如此你会知道全部所需读取行为的大小为n
并且在该会出档案中知道目前处理的进度
ex:
<DataStart>
<!-- Adress是目前档案读取位址 -->
<Image Name="79979.fat" Adress="0" />
<Progess Value="50" />
<Image Name="978978.fat" Adress="28825252" />
<Progess Value="100" />
<DataStart/>
如此你可以知道目前的进度为 g_iDataProgess/n
如此将可以丢给多执行绪画出目前进度
不过比较常见的方式应该是
在parse你档案的时候做一个while回圈
int l_iDataCount = n;
while(n)
{
string l_strFileName = g_strFileList[n];
void*l_pData = DoDataParse( GetFileFormatData( l_strFileName ) );
g_pResource->AddData(l_pData);
DrawProgress();
}
这是最懒惰的方式
不过我比较偏向第一种就是
不过第一种需要花费的精神比较大
以上是一点小小的经验
没有写的很仔细
请大家不要鞭我XD
※ 引述《kuso0516 (隐)》之铭言:
: 我有个程式要载入差不多6MB的24位元点阵图
: 载入的时候都会顿一下
: 是因为寻找足够记忆体所以花了点时间吗?
: 这样正常还是说有问题
: 是不是有比较好的处理方式
: 因为这是一张1600*1200的地图(以後有可能更大)
: 我想做类似即时战略的视窗和地图
: 画面可以上下左右移动
: 程式流程
: 1.把地图画到HDC上
: ┌──────────────┐
: │ │
: │ │
: │ │
: │ │1200
: │ │
: │ │
: └──────────────┘
: 1600
: 2.把地图上的物件画出来
: ┌──────────────┐
: │ │
: │ <囧> │
: │ │ │
: │ /\ │1200
: │ │
: │ │
: └──────────────┘
: 1600
: 3.把HDC某个部份画到视窗上
: ┌──────────────┐
: │ │ ╭───_口X
: │ <囧> │ │ <囧> │
: │ │ │─→ │ │ │
: │ /\ │1200 │ /\ │←视窗
: │ │ ╰─────╯
: │ │
: │ │
: └──────────────┘
: 1600
: 另外想问的就是
: 有些游戏会有LOADING的画面
: 是怎样写的?
: fun work_1(); //某个会花很久时间的涵式
: loading(40); //画面显示40%成功
: fun work_2(); //某个会花很久时间的涵式
: loading(40); //画面显示60%成功
: fun work_3(); //某个会花很久时间的涵式
: loading(20); //画面显示100%成功
: 这样吗XD
: 新手发问,请多指教
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.118.21
1F:→ darkflier:顺便提一下原po的方向是对的 只是经验不太够要多看code 11/22 18:46
2F:→ darkflier:刚开始写code曾被资深设计师说:干你马的会不会写程式啦 11/22 18:47
3F:→ darkflier:多被电几次就会啦XDDD 11/22 18:47
4F:推 kuso0516:嗯嗯 感谢D大 11/22 20:59
5F:推 a1234957:这种命名法?你习惯用VS吗XD 11/23 03:38
6F:→ darkflier:不用VS的比较少吧 毕竟功能强大很多 11/23 07:51
7F:推 Bencrie:那个叫 ... 微软惯用的匈牙利命名法 @@? 11/23 21:54
8F:推 Ebergies:匈牙利真是被误用到想哭 11/29 19:21
9F:推 ddavid:匈牙利命名法的误用,请让Joel来帮您介绍其源流跟正确使用 11/30 00:54
10F:→ ddavid:方式XD: 11/30 00:54