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.