В этой статье мы рассмотрим методы вывода спрайтов на экран.
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
|