2010-09-14 83 views
1

我想在Delphi中根據畫布製作一個小遊戲。基本上,我想製作一個相當大的位圖(例如3000x3000),然後將它加載到畫布中,並且能夠像普通圖像查看器一樣向右/向左/向上/向下滾動,但是我無法似乎找到了我正在尋找的東西。有任何想法嗎?畫布/位圖滾動問題

回答

3

將圖像加載到屏幕外的TBitmap對象。然後,OnPaint或任何時候適用於您的特定應用,請使用BitBltCanvas.Draw在畫布上繪製TBitmap的矩形子圖像。該子部分應該在TBitmap上的(X, Y)開始,其寬度和高度分別等於形式的ClientWidthClientHeight

現在,響應鍵盤事件。寫一個FormKeyDown事件處理程序,並聽取Key = VK_LEFT,Key = VK_RIGHT,Key = VK_UPKey = VK_DOWN(使用case語句)。當您檢測到按下此鍵時,根據需要增加/減少XY,並使用此起點重新繪製場景。

您還可以響應MouseDown,MouseMoveMouseUp事件以使用鼠標進行滾動。您可以只使用中間的一個(MouseMove):您可以檢查光標是否靠近窗體的邊緣,如果是,請順利地在此方向上滾動(例如使用TTimer)。或者,您可以在MouseDown中將FMouseDown標誌設置爲true,並將其重置爲false,MouseUp。然後,在MouseMove中,如果FMouseDowntrue,且在y方向上的增量爲Y-YOld,則在x方向上將位圖滾動增量X-XOld。 (在此,XYMouseMove事件處理程序的參數; (X, Y)是光標的當前位置。)的MouseMove過程應當與

XOld := X; 
YOld := Y; 

結束不管FMouseDown是打開還是關閉。

+1

爲了簡化,您可以在TScrollBox中使用TPaintBox。將TPaintBox尺寸設置爲位圖大小,使用OnPaint事件繪製位圖,並使用OnMouse事件以可編程方式滾動TScrollBox。 – 2010-09-14 20:33:56

+0

好吧,不是很強大,但可能足以滿足非常簡單的需求。 – 2010-09-14 20:39:00