線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2641
推到 Plurk!
推到 Facebook!

電玩貼圖

尚未結案
avalokita
一般會員


發表:29
回覆:35
積分:12
註冊:2003-09-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-22 19:33:00 IP:59.104.xxx.xxx 未訂閱
請問各位: 我的遊戲中時引入了6個圖檔,尺寸都不大。 然而跑起來卻異常的慢....。主要的繪圖方法, 用了doulbe-buffering的概念, 是把遊戲的進行畫面先繪製在暫時的bmp中, 再用paintbox.canvas.copyrect繪出,大小不過250x250而己。 請問前輩們,有何高見,能讓我的電玩跑起來更快一點。 p.s:我只用一個timer,interval為10. tirmer做的事有:繪圖、碰撞偵測等。
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-22 19:57:45 IP:211.23.xxx.xxx 未訂閱
1. 用 canvas.copyrect 比較慢, 請改用 BitBlt 這個 WIN API 2. 若不換 API, 把 Form 和 Panel 的 DoubleBuffer 屬性設為 True. ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com
avalokita
一般會員


發表:29
回覆:35
積分:12
註冊:2003-09-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-22 21:28:20 IP:59.104.xxx.xxx 未訂閱
引言: 1. 用 canvas.copyrect 比較慢, 請改用 BitBlt 這個 WIN API 2. 若不換 API, 把 Form 和 Panel 的 DoubleBuffer 屬性設為 True. ...Aquarius
謝謝Aquarius您的指教。 但晚輩依照您所指示的方法改寫程式碼, 速度依然一樣,沒有什麼改善....。 晚輩的程式中有一張圖(做背景用),占約整個遊戲畫面的一半, 晚輩發現若不描繪這張圖的話,跑得會是快非常多的遊戲畫面。 晚輩認為,可能系統在描繪這張圖用來太多的時間了, 不知該如何改善遊戲repaint的問題。
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-24 08:54:42 IP:61.230.xxx.xxx 未訂閱
佔用畫面一半的圖也每一次重畫?? 那真的沒什麼好建議... 嗯.. 除非你把整個架構改成只重畫有修改的部份.. 不然沒什麼更好的方法了... ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com
avalokita
一般會員


發表:29
回覆:35
積分:12
註冊:2003-09-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-24 18:33:27 IP:211.74.xxx.xxx 未訂閱
引言: 佔用畫面一半的圖也每一次重畫?? 那真的沒什麼好建議... 嗯.. 除非你把整個架構改成只重畫有修改的部份.. 不然沒什麼更好的方法了... ...Aquarius
因為遊戲的場景是天空, 為了讓雲流動,故得進行重繪。 比較不解的是,我的遊戲畫面很小,只有250x250pixel而己, 如果這樣子重繪都要那麼費時的話, 更精緻的遊戲就不用做了。 不曉得諸位前輩對以下問題有何看法? 1.圖層(layer)概念的應用。 2.如何更快地載入資源圖檔。
elvis1000
一般會員


發表:6
回覆:50
積分:16
註冊:2004-12-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-18 16:07:58 IP:218.165.xxx.xxx 未訂閱
改用PaintBox TImage,效果很好。因為我也曾遇到相同的問題。 ------------------------------------------------------------------ Var ProgPath, TempPath:string; backbuffer:TImage; implementation {$R *.DFM} procedure TMainForm.FormCreate(Sender: TObject); begin Application.Title:=ProgName; ProgPath:=ExtractFilePath(Application.ExeName); TempPath:=GetTemporaryPath; //OBJ backbuffer := TImage.Create(mainform); // create back buffer backbuffer.SetBounds(0, 0, paintbox.width, paintbox.height); // there should be backbuffer.Hide; // a better way to do this with the GDI but I don't know how... //Const Application.OnIdle:=IdleDraw; //Others end; procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin //OBJ backbuffer.Free; end; procedure TMainForm.IdleDraw(Sender: TObject; var Done: Boolean); begin //backbuffer.Canvas.brush.color := clblack; // 要不要重繪 //backbuffer.Canvas.Fillrect(backbuffer.Canvas.cliprect); paintbox.Canvas.CopyRect(paintbox.Canvas.ClipRect, backbuffer.Canvas, paintbox.Canvas.ClipRect); end; God bless you!
------
-----------------------
God bless you!
I am Dark_Angel.
系統時間:2024-04-19 20:29:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!