在用Pascal编写的朋友程序(一个基本的保龄球游戏)中,游戏元素(球,背景等)在TShape的画布中绘制(Shape1.Canvas
)
问题是在该画布上绘制的元素在此TShape的左上角画布上以小矩形裁剪。请参阅此屏幕截图:
请注意,我已经在使用Lazarus / LCL(lazarus的主图形/ ui库)的另一个Pascal程序中看到了这种问题,并且这个保龄球程序在Windows中没有任何错误运行,这个bug只在Linux中遇到过I猜......
另请注意,在此画布上绘制时,除了计时器之外的其他程序(例如在OnFormCreate或其他东西中)时,将绘制整个画布。
以下是执行的绘图操作(在计时器的过程中):
procedure TForm2.Timer1Timer(Sender: TObject);
var
i: integer;
affich:word;
begin
Shape1.Canvas.Clear;
Lapiste.display(shape1.Canvas);
Laboule.move(Coupcourant, Lapiste);
Laboule.display(Shape1.Canvas);
//LeTabQuilles.collision(CoupCourant);
for i := 1 to 10 do
begin
LeTabQuilles.tab[i].check(LaBoule, CoupCourant);
(LeTabQuilles.tab[i] as CQuille).display(shape1.Canvas);
end;
// ... (rest of the procedure)
绘图操作(.display)基本上在作为属性给出的画布中绘制位图......
答案 0 :(得分:0)
似乎并非所有的画布都是平等的:)。
只需将TShape
替换为TImage
即可解决问题。
请注意,这个问题非常频繁(至少在我的学校,只在Linux中),如果你直接在Form的画布上绘制(这是一种愚蠢的btw),也会发生这种情况。