Immer wenn ich in einer überschriebenen TImageSprite.DoDraw Procedure Image.DrawRotate mit einem Winkel <> 0 aufrufe, wird die Kollisionserkennung ungenau. Bei einem Winkel von 0 funktioniert alles super. Hatte jemand schon mal so ein Problem und wie hat er das gelöst?
Hier ein Codeauszug:
<PRE>
TOpti = class(TImageSprite)
public
procedure DoMove(MoveCount: Integer); override;
procedure DoDraw; override;
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
end;
procedure TOpti.DoDraw;
begin
Image.DrawRotate(OptiTrainerForm.DXDraw1.Surface, Round(X), Round(Y),
Image.Width, Image.Height, 0, 0.5, 1.0, 50);
end;
procedure TOptiTrainerForm.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
DXImageList1.Items[0].Draw(DXDraw1.Surface, 0, 0, 0);
DXSpriteEngine1.Move(1);
Opti[0].PixelCheck := True;
Opti[0].Collision;
Opti[1].PixelCheck := True;
Opti[1].Collision;
DXSpriteEngine1.Draw;
DXDraw1.Flip;
end;
</PRE>
<BR>
Mfg.
Böhler Oliver
Hier ein Codeauszug:
<PRE>
TOpti = class(TImageSprite)
public
procedure DoMove(MoveCount: Integer); override;
procedure DoDraw; override;
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
end;
procedure TOpti.DoDraw;
begin
Image.DrawRotate(OptiTrainerForm.DXDraw1.Surface, Round(X), Round(Y),
Image.Width, Image.Height, 0, 0.5, 1.0, 50);
end;
procedure TOptiTrainerForm.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
DXImageList1.Items[0].Draw(DXDraw1.Surface, 0, 0, 0);
DXSpriteEngine1.Move(1);
Opti[0].PixelCheck := True;
Opti[0].Collision;
Opti[1].PixelCheck := True;
Opti[1].Collision;
DXSpriteEngine1.Draw;
DXDraw1.Flip;
end;
</PRE>
<BR>
Mfg.
Böhler Oliver