我正在尝试基于 Delphi 中的画布制作一个小游戏。基本上,我想制作一个相当大的位图(例如 3000x3000),然后将其加载到画布中,并且能够像普通图像查看器一样向右/向左/向上/向下滚动,但是我不能似乎找到了我正在寻找的东西。有任何想法吗?
1 回答
将图像加载到屏幕外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
例如,使用 a )。或者,您可以将FMouseDown
标志设置为true
in MouseDown
,然后将其重置为false
in MouseUp
。然后,在 中,如果是,则在 x 方向上MouseMove
滚动位图,并在 y 方向上滚动位图。(这里,和是事件处理程序的参数;是光标的当前位置。)过程应该以X-XOld
FMouseDown
true
Y-YOld
X
Y
MouseMove
(X, Y)
MouseMove
XOld := X;
YOld := Y;
不管FMouseDown
是开还是关。