Advanced Draw

Кручу-верчу, обмануть хочу, или как использовать продвинутые методы вывода спрайтов.

В классе TSprite есть три метода:
DoDraw, DoCollision и DoMove
Чтобы заставить спрайт созданный таким образом:
TPlayer = class(TImageSprite)  
end;

выводится через продвинутые методы (DrawRotate, DrawAplha, DrawSub, DrawWave, StretchDraw), нужно "заглушить" стандартный вывод при создании объекта. Вот так:
type  
   THero = class(TImageSprite)  
      Angle:integer;  
   protected  
      procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;  
      procedure DoMove(MoveCount: Integer); override;  
      procedure DoDraw; override; // вот здесь  
   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;

А теперь недокументированная фишка!
Забываем то, что написано выше и читаем дальше.
Cоздадим спрайт таким образом:
TPlayer = class(TImageSpriteEx)  
protected  
   procedure DoMove(MoveCount: Integer); override;  
end;

И теперь в процедуре DoMove можно задать Angle (угол поворота спрайта) и Alpha (прозрачность спрайта). Примерно так:
type  
   THero = class(TImageSpriteEx)  
      Angle:integer;  
   protected  
      procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;  
      procedure DoMove(MoveCount: Integer); override;  
   end;  
  
procedure TPlayer.DoMove(MoveCount: Integer);  
begin  
   X:=100;  
   Y:=100;  
   Angle:=60;  
   Alpha:=150;  
end;

Дерзайте!
Теги:
Advanced Draw
Добавлено: 13 Июля 2018 08:18:33 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...