作者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
→ darkflier:順便提一下原po的方向是對的 只是經驗不太夠要多看code 11/22 18:46
→ darkflier:剛開始寫code曾被資深設計師說:幹你馬的會不會寫程式啦 11/22 18:47
→ darkflier:多被電幾次就會啦XDDD 11/22 18:47
推 kuso0516:嗯嗯 感謝D大 11/22 20:59
推 a1234957:這種命名法?你習慣用VS嗎XD 11/23 03:38
→ darkflier:不用VS的比較少吧 畢竟功能強大很多 11/23 07:51
推 Bencrie:那個叫 ... 微軟慣用的匈牙利命名法 @@? 11/23 21:54
推 Ebergies:匈牙利真是被誤用到想哭 11/29 19:21
推 ddavid:匈牙利命名法的誤用,請讓Joel來幫您介紹其源流跟正確使用 11/30 00:54
→ ddavid:方式XD: 11/30 00:54