電玩貼圖 |
尚未結案
|
avalokita
一般會員 發表:29 回覆:35 積分:12 註冊:2003-09-02 發送簡訊給我 |
|
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
|
avalokita
一般會員 發表:29 回覆:35 積分:12 註冊:2003-09-02 發送簡訊給我 |
引言: 1. 用 canvas.copyrect 比較慢, 請改用 BitBlt 這個 WIN API 2. 若不換 API, 把 Form 和 Panel 的 DoubleBuffer 屬性設為 True. ...Aquarius謝謝Aquarius您的指教。 但晚輩依照您所指示的方法改寫程式碼, 速度依然一樣,沒有什麼改善....。 晚輩的程式中有一張圖(做背景用),占約整個遊戲畫面的一半, 晚輩發現若不描繪這張圖的話,跑得會是快非常多的遊戲畫面。 晚輩認為,可能系統在描繪這張圖用來太多的時間了, 不知該如何改善遊戲repaint的問題。 |
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
|
avalokita
一般會員 發表:29 回覆:35 積分:12 註冊:2003-09-02 發送簡訊給我 |
|
elvis1000
一般會員 發表:6 回覆:50 積分:16 註冊:2004-12-18 發送簡訊給我 |
改用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. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |