我正在尝试根据Delphi中的画布制作一个小游戏。基本上,我想制作一个相当大的位图(例如3000x3000),然后将其加载到画布中,并且能够像普通的图像查看器一样向右/向左/向上/向下滚动,但是我不能似乎找到了我正在寻找的东西。有什么想法吗?
答案 0 :(得分:3)
将图像加载到屏幕外TBitmap
个对象。然后,OnPaint
或适合您的特定应用程序,使用BitBlt
或Canvas.Draw
在画布上绘制TBitmap
的矩形子图像。子部分应从(X, Y)
上的TBitmap
开始,其宽度和高度分别等于表单的ClientWidth
和ClientHeight
。
现在,回应键盘事件。编写FormKeyDown
事件处理程序,并聆听Key = VK_LEFT
,Key = VK_RIGHT
,Key = VK_UP
和Key = VK_DOWN
(使用case
语句)。当您检测到按下此键时,请根据需要增加/减少X
或Y
,然后使用此起点再次绘制场景。
您还可以回复MouseDown
,MouseMove
和MouseUp
事件以使用鼠标滚动。您可以只使用中间的一个(MouseMove
):您可以检查光标是否靠近表单的边缘,如果是,则可以平滑地向这个方向滚动(例如使用TTimer
)。或者,您可以在FMouseDown
中将true
标记设置为MouseDown
,并将其重置为false
中的MouseUp
。然后,在MouseMove
中,如果X-XOld
为FMouseDown
,则在x方向上按位true
滚动位图,并在y方向上滚动增量Y-YOld
。 (此处,X
和Y
是MouseMove
事件处理程序的参数; (X, Y)
是游标的当前位置。)MouseMove
过程应以
XOld := X;
YOld := Y;
无论FMouseDown
是开启还是关闭。