画布/位图滚动问题

时间:2010-09-14 19:18:55

标签: delphi canvas bitmap 2d terrain

我正在尝试根据Delphi中的画布制作一个小游戏。基本上,我想制作一个相当大的位图(例如3000x3000),然后将其加载到画布中,并且能够像普通的图像查看器一样向右/向左/向上/向下滚动,但是我不能似乎找到了我正在寻找的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

将图像加载到屏幕外TBitmap个对象。然后,OnPaint或适合您的特定应用程序,使用BitBltCanvas.Draw在画布上绘制TBitmap的矩形子图像。子部分应从(X, Y)上的TBitmap开始,其宽度和高度分别等于表单的ClientWidthClientHeight

现在,回应键盘事件。编写FormKeyDown事件处理程序,并聆听Key = VK_LEFTKey = VK_RIGHTKey = VK_UPKey = VK_DOWN(使用case语句)。当您检测到按下此键时,请根据需要增加/减少XY,然后使用此起点再次绘制场景。

您还可以回复MouseDownMouseMoveMouseUp事件以使用鼠标滚动。您可以只使用中间的一个(MouseMove):您可以检查光标是否靠近表单的边缘,如果是,则可以平滑地向这个方向滚动(例如使用TTimer )。或者,您可以在FMouseDown中将true标记设置为MouseDown,并将其重置为false中的MouseUp。然后,在MouseMove中,如果X-XOldFMouseDown,则在x方向上按位true滚动位图,并在y方向上滚动增量Y-YOld。 (此处,XYMouseMove事件处理程序的参数; (X, Y)是游标的当前位置。)MouseMove过程应以

XOld := X;
YOld := Y;

无论FMouseDown是开启还是关闭。