unit sprites;
interface
uses bmpread,timer18;
const
{...}
ScrSizeX = 800;
ScrSizeX1 = ScrSizeX-1;
ScrSizeY = 600;
ScrSizeY1 = ScrSizeY-1;
type
{...}
ScreenType = array[0..ScrSizeY1,0..ScrSizeX1]of byte;
{для экрана}
{...}
implementation
uses graph;
{...}
PutSprite(Sprite:SpriteType);
{вывод спрайта на экран}
begin
graph.PutSprite(Sprite.X shr 6,Sprite.Y shr 6,
Sprite.X shr 6 + Xsize - 1,
Sprite.Y shr 6 + Ysize - 1,
Sprite.Img^[Sprite.phase,0,0]);
end;
{...}
procedure CreateScreenBuffer;
begin {создание экранного буфера}
if not IsBuffer then begin
IsBuffer := TRUE;
getmem(scr,GetPageSize);
SetVirtualMode(scr);
end;
end;
procedure DestroyScreenBuffer;
begin {уничтожение экранного буфера}
if IsBuffer then begin
IsBuffer := FALSE;
freemem(scr,GetPageSize);
scr := ptr(SegA000,0);
SetNormalMode;
end;
end;
procedure ScreenBufferToScreen;
begin {отображение буфера на экран}
if IsBuffer then
FlipToScreen(scr);
end;
procedure CreateBackBuffer;
begin {создание экранного буфера}
if not IsBackBuffer then begin
IsBackBuffer := TRUE;
getmem(BackBuffer,GetPageSize);
end;
end;
procedure DestroyBackBuffer;
begin {уничтожение экранного буфера}
if IsBackBuffer then begin
IsBackBuffer := FALSE;
freemem(BackBuffer,GetPageSize);
end;
end;
procedure BackBufferToScreen;
begin {отображение буфера на экран}
if IsBackBuffer then
move(BackBuffer^,Scr^,GetPageSize);
end;
begin
IsBuffer := FALSE;
IsBackBuffer := FALSE;
end.