Методы вывода спрайтов
Оформил: XVeL
Автор: Daddy
WEB-сайт: http://daddy.mirgames.ru
В этой статье мы рассмотрим методы вывода спрайтов на
экран.
1. Draw - Стандартная функция
вывода
Draw(X,Y: Integer; Source: TDirectDrawSurface; Transparent: Boolean) X,Y
- координаты. TDirectDrawSurface - поверхность
(DXDraw.Surface) Transparent -
видимость
2. StretchDraw - Вывод со
"скалированием", т.е. с изменением размера исходного
спрайта
StretchDraw(constDestRect:TRect;Source:TDirectDrawSurface;Transparent:Boolean=True)
TRect: Top
: integer; Bottom : integer; Left :
integer; Right : integer; или
просто TopLeft : Тpoint BottomRight :
Tpoint
одним словом
записи: rect.TopLeft.X:=100; rect.TopLeft.Y:=200; и rect.Left:=100; rect.Top:=200 абсолютно
равны.
Небольшой примерчик:
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
const k:integer=0; n:integer=0;
var rect:trect;
begin
if not DXDraw.CanDraw then exit;
if n = 10 then k:=-1;
if n = 0 then k:=1;
n:=n+k;
rect.left:=10;
rect.right:=10*n;
rect.top:=10;
rect.bottom:=10*n;
DXDraw.Surface.Fill(0);
DXIMageList.Items.Find('1').StretchDraw(DXDraw.Surface,rect,0);
DXDraw.Flip
end;
3. DrawAlpha - Выводит с
прозрачностью, так-же параллельно можно делать stretch
DrawAlpha(const DestRect,SrcRect:TRect;Source:TDirectDrawSurface;Transparent:Boolean;Alpha:Integer); Значение
Alpha изменяется в пределах от 0 до 255.
Небольшой
примерчик: Киньте какой-нибудь фон, сразу будет видно
прозрачность.
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
const k:integer=0; n:integer=0;
var rect:trect;
begin
if not DXDraw.CanDraw then exit;
if n = 10 then k:=-1;
if n = 0 then k:=1;
n:=n+k;
rect.left:=50-n*5;
rect.right:=50+n*5;
rect.top:=50-n*5;
rect.bottom:=50+n*5;
DXDraw.Surface.Fill(0);
DXIMageList.Items.Find('1').DrawAlpha(DXDraw.Surface,rect,0,n*25);
DXDraw.Flip
end;
Все остальное чуть
позже. 4. DrawAdd : Хорошо подходит для создания
эффектов. Вспышек, взрывов.:
5. DrawSub : Хорошо
подходит для создания теней.:
6. DrawRotate :
Вывод с поворотом исходного спрайта:
DrawRotate(Dest:
TDirectDrawSurface; X, Y, Width, Height, PatternIndex:
Integer; CenterX, CenterY: Double; Angle:
Integer);
CenterX,CenterY - ось вращения. При
CenterX и CenterY равных 0 ось проиходит через левый-верхний
угол спрайта При CenterX и CenterY равных 0.5 ось проиходит
через центр спрайта При CenterX и CenterY равных 1 ось
проиходит через правый-нижний угол спрайта Angle -
угол поворота, изменяется от 0 до 255
Небольшой
примерчик:
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
const k:integer=0; n:integer=0;
begin
if not DXDraw.CanDraw then exit;
if n = 256 then k:=-1;
if n = 0 then k:=1;
n:=n+k;
DXDraw.Surface.Fill(0);
DXIMageList.Items.Find('1').DrawRotate(DXDraw.Surface,50,50,50,50,0,0.5,0.5,n);
DXDraw.Flip
end;
7. DrawRotateAlpha :
Вывод с поворотом исходного спрайта + Alpha:
8.
DrawRotateAdd : Вывод с поворотом исходного спрайта +
9. DrawRotateSub : Вывод с поворотом исходного
спрайта + Sub
|