69 lines
1.7 KiB
ObjectPascal

unit utest5;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, BGRABitmap, BGRABitmapTypes, Graphics, utestpacrect;
type
{ TTest5 }
TTest5 = class(TTestPacRect)
protected
virtualScreen: TBGRABitmap;
public
constructor Create;
destructor Destroy; override;
procedure OnPaint(Canvas: TCanvas; Left,Top,Width,Height: Integer); override;
end;
implementation
{ TTest5 }
constructor TTest5.Create;
begin
inherited Create;
Name := 'TBGRABitmap.PutImage. This is the recommended way. Non-flickering pacmans walking with a rectangle. Rectangle opacity always there with the rendering capacities on BGRABitmap.';
virtualScreen := nil;
end;
destructor TTest5.Destroy;
begin
virtualScreen.Free;
inherited Destroy;
end;
procedure TTest5.OnPaint(Canvas: TCanvas; Left,Top,Width, Height: Integer);
var i: integer;
begin
if backgroundImg = nil then exit;
if (virtualscreen <> nil) and ((virtualscreen.width <> width) or (virtualscreen.Height <> height)) then
FreeAndNil(virtualScreen);
if virtualscreen = nil then
begin
virtualscreen := TBGRABitmap.Create(Width,Height);
//draw background opaque in BGRA bitmap
virtualscreen.PutImage(0,0,backgroundImg,dmSet);
end;
//draw sprites transparent in BGRA bitmap
for i := 0 to high(pacLoc) do
virtualscreen.PutImage(pacLoc[i].x,pacLoc[i].y,pacImg[numPacImg],dmDrawWithTransparency);
//draw virtualscreen opaque on canvas
virtualscreen.Draw(Canvas,Left,Top,True);
//erase sprites
for i := 0 to high(pacLoc) do
virtualscreen.FillRect(RectWithSize(pacLoc[i].x,pacLoc[i].y,
pacImg[numPacImg].Width,pacImg[numPacImg].Height),
backgroundImg,dmSet);
end;
end.