[問題] 繪圖與部分繪圖

看板C_Sharp作者 (松鼠)時間17年前 (2009/02/11 23:32), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/4 (看更多)
剛接觸C#幾天,想用來實做一個簡單的遊戲, 鍵盤可控制腳色在畫面移動這樣的, 第一步就開始試著將圖片繪到表單上, 當然一開始使用PictureBox放完背景再蓋一層主角上去發現控制項無法真正透明的問題, 就改用GDI繪圖的方式, 然後又碰到畫面閃爍的問題, 查了很久資料看到有幾種寫法:用Graphics當Buffer雙緩衝、BufferedGraphics類別、 改表單DoubleBuffer參數、以前MFC會用的dll方法等等... 看起來第一個方法比較簡單,就用第一種寫了... 因為不熟悉覆寫等OO寫法,我是先建立OnPaint,在裡面直接呼叫自己寫的Paint函式, 裡面先繪到一個緩衝的Graphics,再把這個Bitmap繪到畫面上, 根據timer將圖片的座標改變並call我寫的Paint函式,而不讓他自動Invalidate(), 像這樣: private void MyPaint(){ Bitmap offScreenBmp = new Bitmap(this.Width, this.Height); Graphics Buffer; Buffer = Graphics.FromImage(offScreenBmp); Graphics Screen = this.CreateGraphics(); Bitmap pic = new Bitmap("pic1.jpg"); Buffer.Clear(this.BackColor); Buffer.DrawImage(pic, pic_x, pic_y, pic.Width, pic.Height); Screen.DrawImage(offScreenBmp, 0, 0); Buffer.Dispose(); Screen.Dispose(); } 從畫面上看似乎是沒在閃爍也正常移動了, 記憶體用量卻會從15,000k一直增加到832,000k左右,再跳回去循環, 是不是寫法有問題呢?! 如果我在移動的重繪只繪上主角的圖片,背景會不見, 那如果畫面上很多物體都在移動的時候,會不會記憶體被吃光...? 還是有辦法只讓移動的部分重繪? 對於畫布到底怎麼更新的實在沒什麼概念... 希望大家指點,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.245.253

02/12 06:40, , 1F
Screen.DrawImage(offScreenBmp,0,0);OnPaint僅需要此行
02/12 06:40, 1F

02/12 16:39, , 2F
那請問Screen和offScreenBmp的宣告是放在廣域嗎?
02/12 16:39, 2F

02/13 06:40, , 3F
Screen和offScreenBmp的宣告 放在廣域
02/13 06:40, 3F
文章代碼(AID): #19ak-a1O (C_Sharp)
文章代碼(AID): #19ak-a1O (C_Sharp)