全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1241
推到 Plurk!
推到 Facebook!

關於背景圖捲動的效能?

尚未結案
fizecat
一般會員


發表:4
回覆:3
積分:1
註冊:2004-05-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-14 12:26:29 IP:203.64.xxx.xxx 未訂閱
我希望能讓一張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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-16 16:08:05 IP:220.135.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-17 13:42:33 IP:140.113.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-22 17:16:38 IP:203.64.xxx.xxx 未訂閱
arisaka_matsuri 你好: 您的程式在我的電腦上跑起來cpu使用率只有0~3% (P4 3.0G 256MB RAM)。 但我將form放大到全螢幕後(800*600),cpu使用率則會跑到36%左右,有方法可解決此問題嗎? 感謝指教 m(_ _)m
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-23 11:27:07 IP:140.113.xxx.xxx 未訂閱
dear fizecat:
引言:但我將form放大到全螢幕後(800*600),cpu使用率則會跑到36%左右,有方法可解決此問題嗎?
呃~不知道所謂放大到全螢幕是指將Form放大到最大嗎?我自己測試的結果其實不太穩,不知道是跟跑背景的程式多寡有無關係。不論是在1280*1024或是800*600下,將Form大小放在正常或最大化的情況下,以及搭配兩種Timer方式來貼圖,cpu的使用率都不會超過10%。不知道目前你的用途是在哪方面,因為用Timer的方式也是一種權衡罷了~
wildbattle
一般會員


發表:7
回覆:12
積分:3
註冊:2005-12-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-07-26 11:55:05 IP:218.164.xxx.xxx 未訂閱

JerryKuo大大您好:

小弟使用您的方法,Compile確實沒問題,也可以有捲動的效果。

但是,圖片好像會顯示不完整,而且有被「拉長」的感覺。例如:小弟的圖高度是480,而Form1的ClientHeight也是480,當作呈現畫布Image1的Height也是480。但圖片好像被拉長到超過480。導致顯示出來的圖下面無法完整呈現。而且圖的線條可以看出是被「拉長」的感覺。

小弟是用Graphics::TBitmap *Bmp去讀圖,不知道是不是讀圖的時候沒做好處理?

JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-07-27 09:31:58 IP:220.135.xxx.xxx 未訂閱

很難想像出你的問題在哪?...因為我沒遇過這樣的問題。

你讀圖的方式應該跟我的一樣,照理說應該不會出現拉長的效果。

或許你的問題在copyrect 時,參數有下錯,再檢查一下copyrect的參數有無正確。

系統時間:2024-05-02 19:38:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!