まずは、せっかく定義したTBitmapの、
生成と解放コードを書きましょう。
この裏画面は、ゲームが起動中ずっと必要で、
ゲーム終了時に不要になるので、
アプリの開始時&終了時しかタイミングがありません。
FormのonCreateとonCloseを編集します。
procedure TForm1.FormCreate(Sender: TObject);
begin
BackScreen:=TBitmap.Create;
BackScreen.Width:=150;
BackScreen.Height:=300;
BackScreen.Canvas.Brush.Style:=bsSolid;
BackScreen.Canvas.Pen.Style:=psSolid;
BackScreen.Canvas.Pen.Mode:=pmCopy;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
BackScreen.Free;
end;
Createのついでに、サイズの変更もしておきました。
ブラシとペンの謎のプロパティも固定値にしておきました。
タイマーはもう貼り付けてありますよね。
Intervalプロパティーを書き換えます。
さて、問題はここなのですが、
60fps出すなら、intervalは16です。
しかし、ここは30にしておきましょう。
60出ない気がするんで・・・
intervalは33に設定します。
そしたら、onTimerイベントを記述しましょう。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
with BackScreen.Canvas do begin
Brush.Color:=clBlack;
FillRect(Rect(0,0,150,300));
end;
PaintBox1.Canvas.Draw(0,0,BackScreen);
end;
with文は、参照の省略ですから、
Brush.Color:=clBlack;
FillRect(Rect(0,0,150,300));
は、 BackScreen.Canvas が付いていることになります。
ブラシを黒にして、それで画面を塗りつぶしています。
そのあと、PaintBoxのキャンバスにその黒い画面を転送して終了です。
これが秒間30回よばれるので、
PaintBoxでも、消えてもとにもどらない、ってことはないわけです。
コンテンツ
最新の12件
2023-06-12
2021-02-15
2013-06-19
2012-07-14
2012-02-04
2012-01-06
2011-03-31
2010-08-26
2010-03-15
2009-10-21
2009-02-12
2008-11-18
メニュー編集
- counter: 822
- today: 1
- yesterday: 0
- online: 1