關於背景圖捲動的效能? |
尚未結案
|
fizecat
一般會員 發表:4 回覆:3 積分:1 註冊:2004-05-12 發送簡訊給我 |
我希望能讓一張1403*356大小的背景圖產生捲動效果(類似瑪莉歐遊戲的背景捲動),捲動顯示的大小為800*356;我的方法是先將一張1403*356大小的bmp圖檔存在bmpBG,用一個Timer元件不斷的從背景圖截取800*356的圖片貼在Image元件上(每秒貼20次);但這個方法會讓CPU使用率過高,請問各位前輩有沒有更好的方法,能降低CPU使用率也能達到捲動背景的效果,或者我的方法有誤? 例圖如下:
程式碼如下:
void __fastcall TForm_Play::Tim_BG1Timer(TObject *Sender)
{
Img_bground->Canvas->CopyMode=cmSrcCopy;
Img_bground->Canvas->CopyRect(Rect(0, 0, 1403-C_BGleft, 356), bmpBG->Canvas,Rect(C_BGleft, 0, 1403, 356)); Img_bground->Canvas->CopyRect(Rect(1403-C_BGleft, 0, 1403,356), bmpBG->Canvas,Rect(0, 0, C_BGleft, 356));
C_BGleft+=C_MVdis;//移動
//C_BGleft紀錄捲動圖片的位置
//C_MVdis每次捲動的距離 if (C_BGleft >= bmpBG->Width){
C_BGleft=0;
}
} 發表人 - fizecat 於 2004/12/14 13:24:17
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
fizecat你好: 用你的方法改了一下,cpu的使用率並沒有增加的感覺。試試看
不過應該還有更快的方法。繼續討論。
... Bmp是取背景的原始圖。 ... void __fastcall TForm1::Timer2Timer(TObject *Sender) { Graphics::TBitmap* bmpbg=new Graphics::TBitmap; static int scr_x = 0; static int scr_m = 1; bmpbg->Width = 640; bmpbg->Height= 480; bmpbg->Canvas->CopyRect(Rect(0, 0, bmpbg->Width, bmpbg->Height), Bmp->Canvas,Rect(scr_x, 0, 640 scr_x, 480)); if( scr_x >= (Bmp->Width - bmpbg->Width)) { scr_m = -1; } if( scr_x <= 0) { scr_m = 1; } scr_x = scr_m; Image1->Picture->Assign(bmpbg); delete bmpbg; } void __fastcall TForm1::Button17Click(TObject *Sender) { if (!Timer2->Enabled) { Timer2->Enabled = true; Form1->DoubleBuffered = true; } else { Timer2->Enabled = false; Form1->DoubleBuffered = false; } } |
arisaka_matsuri
高階會員 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
dear fizecat:
實際寫個例子,CPU的使用率還蠻低的,約2%左右,用multimedia timer時會比較高(25%)~測試環境:P4 2.0G + 512MB RAM。不知道你所謂的「過高」是多高呢? 我的範例在http://delphi.ktop.com.tw/topic.php?TOPIC_ID=61703 發表人 - arisaka_matsuri 於 2004/12/17 13:45:07
|
fizecat
一般會員 發表:4 回覆:3 積分:1 註冊:2004-05-12 發送簡訊給我 |
|
arisaka_matsuri
高階會員 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
|
wildbattle
一般會員 發表:7 回覆:12 積分:3 註冊:2005-12-08 發送簡訊給我 |
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |