Advanced Draw

Материал из DRKB


Кручу-верчу, обмануть хочу, или как использовать продвинутые методы вывода спрайтов. В классе TSprite есть три метода: DoDraw, DoCollision и DoMove Чтобы заставить спрайт созданный таким образом:

TPlayer = class(TImageSprite)
end;


выводится через продвинутые методы (DrawRotate, DrawAplha, DrawSub, DrawWave, StretchDraw), нужно "заглушить" стандартный вывод при создании объекта. Вот так:

type
  THero = class(TImageSprite)
  protected
    procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
    procedure DoMove(MoveCount: Integer); override;
    procedure DoDraw; override; // вот здесь
  public
    Angle: Integer;
  end;


Теперь в процедуре DoDraw выводим спрайт нужным нам способом. Вот так:

procedure THero.DoDraw;
begin
  Image.DrawRotate(Form1.DXDraw.Surface,
    Round(x)+16, Round(y)+16,
    Image.Width, Image.Height,
    Round(animpos), 0.5, 0.5, Angle);
end;


Посмотрите этот dodraw.zip примерчик, для более ясного понимания. А теперь недокументированная фишка! Забываем то, что написано выше и читаем дальше. Cоздадим спрайт таким образом:

TPlayer = class(TImageSpriteEx)
protected
  procedure DoMove(MoveCount: Integer); override;
end;


И теперь в процедуре DoMove можно задать Angle (угол поворота спрайта) и Alpha (прозрачность спрайта). Примерно так:

type
   THero = class(TImageSpriteEx)
   protected
      procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
      procedure DoMove(MoveCount: Integer); override;
   public
      Angle: Integer;
   end;

procedure TPlayer.DoMove(MoveCount: Integer);
begin
   X := 100;
   Y := 100;
   Angle := 60;
   Alpha := 150;
end;


Author: Daddy
Source: http://daddy.mirgames.ru
ID: 03923