1

Pascal で書かれた友人のプログラム (基本的なボウリング ゲーム) では、ゲーム要素 (ボール、背景など) が TShape のキャンバスに描画されます ( Shape1.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 に答える