1

在一个朋友用 Pascal 编写的程序(一个基本的保龄球游戏)中,游戏元素(球、背景等)被绘制在 TShape 的画布中(Shape1.Canvas

问题是在该 Canvas 上绘制的元素被裁剪为该 TShape 左上角画布上的一个小矩形。看这个截图:故障截图

请注意,我已经看到另一个同样使用 Lazarus/LCL(lazarus 的主要图形/ui 库)的 Pascal 程序存在此类问题,并且该保龄球程序在 Windows 中运行时没有任何错误,我猜该错误仅在 Linux 中出现。 .

另请注意,当从计时器以外的过程(例如在 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)基本上在画布中绘制位图作为属性给出......

4

1 回答 1

0

似乎并非所有的画布生来都是平等的:)。

TShape只需将 替换为即可解决问题TImage。请注意,这个问题确实很常见(至少在我的学校,并且仅在 Linux 中),并且如果您直接在表单的画布上绘制也会发生(顺便说一句,这有点愚蠢)。

于 2012-05-17T10:00:08.537 回答