AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bild rotieren / bewegen (DelphiX)
Thema durchsuchen
Ansicht
Themen-Optionen

Bild rotieren / bewegen (DelphiX)

Ein Thema von Airblader · begonnen am 3. Jan 2005 · letzter Beitrag vom 4. Jan 2005
 
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#6

Re: Bild rotieren / bewegen (DelphiX)

  Alt 3. Jan 2005, 19:38
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?
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz