Advanced Draw |
Previous Top Next |
Автор: Daddy
WEB-сайт: http://daddy.mirgames.ru
Кручу-верчу, обмануть хочу, или как использовать продвинутые методы вывода спрайтов. В классе TSprite есть три метода: DoDraw, DoCollision и DoMove Чтобы заставить спрайт созданный таким образом:
Code: |
TPlayer = class(TImageSprite) end; |
выводится через продвинутые методы (DrawRotate, DrawAplha, DrawSub, DrawWave, StretchDraw), нужно "заглушить" стандартный вывод при создании объекта. Вот так:
Code: |
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 выводим спрайт нужным нам способом. Вот так:
Code: |
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оздадим спрайт таким образом:
Code: |
TPlayer = class(TImageSpriteEx) protected procedure DoMove(MoveCount: Integer); override; end; |
И теперь в процедуре DoMove можно задать Angle (угол поворота спрайта) и Alpha (прозрачность спрайта). Примерно так:
Code: |
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; |
©Drkb::03923
DelphiWorld 6.0