Zitat von
Oxmyx:
Zitat von
Airblader:
Naja - aber wie kann ich dann das Bild auch entlang dieser Achse fahren lassen?
Na einfach mit ein bisschen Trigonometrie.
x := x + (sin(winkel) * geschwindigkeit);
y := y + (cos(winkel) * geschwindigkeit);
Hm...es fährt...aber Kreuz und Quer.
Vielleicht hilft es, wenn ich mal meinen Code poste:
Delphi-Quellcode:
TPlayer = record // Player
Pos: TPoint; // Position
Winkel: Integer; // Richtung
Geschwindigkeit: Real; // Geschwindigkeit
end;
[...]
Player: TPlayer;
Das ist meine Deklarierung des Records.
Im OnCreate mach ich folgende Startwerte:
Delphi-Quellcode:
Player.Pos.X := 200;
Player.Pos.Y := 550;
Player.Winkel := 0;
Player.Geschwindigkeit := 0.0;
Und meine OnTimer prozedur...hm...ich weiss nicht, was da für evtl. Fehlerbehebung relevant wäre, von daher poste ich sie mal ganz:
Delphi-Quellcode:
if not Form1.DXDraw1.CanDraw
then
Exit;
if (GetAsyncKeyState(VK_LEFT) < 0)
then
Dec(Player.Winkel,10);
if (GetAsyncKeyState(VK_RIGHT) < 0)
then
Inc(Player.Winkel,10);
if (GetAsyncKeyState(VK_UP) < 0)
then
Player.Geschwindigkeit := 2;
if (GetAsyncKeyState(VK_DOWN) < 0)
then
Player.Geschwindigkeit := 0;
Player.Pos.X := Round(Player.Pos.X + (Sin(Player.Winkel) * Player.Geschwindigkeit));
Player.Pos.Y := Round(Player.Pos.Y + (Cos(Player.Winkel) * Player.Geschwindigkeit));
Form1.DXDraw1.Surface.Fill(0);
Form1.DXImageList1.Items.Find('
car').DrawRotate(Form1.DXDraw1.Surface, Player.Pos.X, Player.Pos.Y, Form1.DXImageList1.Items.Find('
car').Width, Form1.DXImageList1.Items
.Find('
car').Height, 0, 0.5, 0.5, Player.Winkel );
Form1.DXDraw1.Flip;
Ich vermute das Problem in der DrawRotate-Funktion.
ich bin ehrlich und gestehe: Ich weiss nicht wofür die 0.5 stehen, waren einfach testwerte (die funktiondsdeklarierung sagt mir CenterX und CenterY)
air
Edit: Ah, es ist der Drehpunkt...aber auf was muss ich ihn setzn?