Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Advanced Draw

Оформил: XVeL
Автор: Daddy
WEB-сайт: http://daddy.mirgames.ru

Кручу-верчу, обмануть хочу, или как использовать продвинутые методы вывода спрайтов. В классе 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;
Посмотрите этот dodraw.zip примерчик, для более ясного понимания. А теперь недокументированная фишка! Забываем то, что написано выше и читаем дальше. 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;
Дерзайте!
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay