Dann habe ich keine Ahnung wieso das nicht funktioniert, wie ich will.
Ich habe meine MainUnit wo ich das AdDraw erzeuge und wo in einem Timer immer AdDraw.Flip aufrufe.
Dann habe ich einen eigenen Typ definiert:
Delphi-Quellcode:
type
TSpieler = class
private
FX, FY, FWinkel : Double;
FFarbe : TAndorraColor;
FAdDraw : TAdDraw;
FBreite : Double;
FVisible : Boolean;
public
Name : String;
constructor Create (AdDraw : TAdDraw);
destructor Destroy; override;
procedure forwd (Pixel : Integer);
procedure left (Grad : Integer);
procedure right(Grad : Integer);
function GetPosition : TAdPoint;
property X: Double read FX write FX;
property Y: Double read FY write FY;
property Winkel : Double read FWinkel write FWinkel;
property Farbe : TAndorraColor read FFarbe write FFarbe;
property Breite : Double read FBreite write FBreite;
property Visible : Boolean read FVisible write FVisible;
end;
Und die Prozedur forwd sieht wiefolgt aus:
Delphi-Quellcode:
procedure TSpieler.forwd(Pixel : Integer);
begin
FX := FX + Pixel * cos(pi * (90.0 + Winkel)/ 180.0);
FY := FY - Pixel * sin(pi * (90.0 + Winkel)/ 180.0);
if FVisible then begin
FAdDraw.BeginScene;
with FAdDraw.Canvas do begin
Pen.Color := FFarbe; //Ad_ARGB(100,100,100,100)
Brush.Color := FFarbe; //Ad_ARGB(100,100,100,100)
Pen.Width := FBreite; //FBreite = 1
FAdDraw.Canvas.LineTo(round(FX),round(FY));
Release;
end;
FAdDraw.EndScene;
FAdDraw.Flip;
end;
end;
In dem Timer steht nun nur:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Sp.forwd(1);
Caption := IntToStr(Sp.GetPosition.X) + '|' + IntToStr(Sp.GetPosition.Y);
AdDraw.Flip;
end;
An der Caption kann ich erkennen, dass die Positionen sich richtig verändern, nur es wird halt nichts gezeichnet und ich weiß einfach nicht wieso. Weiß vielleicht von euch jemand wo mein Fehler liegt?
mfg Looper