![]() |
DelphiX - Objekte drehen(Autos)
[/delphi]Hallo,
ich möchte ein kleines auto spiel schreiben und habe probleme mit dem drehn des autos:
Delphi-Quellcode:
Const:
procedure TGame.KeyCheck(Key:Word);
begin if Key = VK_RIGHT then begin if Player.zr + 10 <= Lings then Player.zr:=Player.zr+10; // Player.x:=Player.x-10; end; if Key = VK_Left then begin if Player.zr - 10 >= -Rechts then Player.zr:=Player.zr-10; // Player.x:=Player.x-10; end; if Key = VK_UP then begin Player.x:=Player.x+10; end; if Key = VK_Down then begin Player.x:=Player.x-10; end; if key = vk_f1 then stop:=not stop; end;
Delphi-Quellcode:
ich habe mir eine kleine grafik lib geschrieben dort habe ich den befehl DrawRoate verwendet:
const
lings = 60; rechts = 60; oben = 257; Unten = 130;
Delphi-Quellcode:
aufrufen tue ich den so:
procedure TDX.DrawRoateImage(Name:String; x,y,a,pi:Integer; cx,cy:Double);
var i:Integer; begin i:=DXImageList1.Items.Find(Name).Index; DXImageList1.Items[i].DrawRotate(DXDraw1.Surface,x,y,DXImageList1.Items[i].Width,DXImageList1.Items[i].Height,pi,cx,cy,a); end;
Delphi-Quellcode:
der auskometrite teile war nur ein test(und ich weiß nicht ob ich den nochmal später brauche) der dreht einfach nur ein objekt immer und dies langsamm !!
procedure TGame.Draw;
var i:Integer; begin for i:=0 to high(Map) do begin GFL.DrawImage(Map[i].Name,Map[i].Tex,Map[i].x,Map[i].y); end; // GFL.DrawImage('A' + IntToStr(Player.typ) + IntToStr(Player.richtung),0,player.x,Player.y); {if stop = False then begin if PLayer.zr1 >= 5 then begin Player.zr1:=0; if player.zr <= 360 then begin inc(player.zr); end else player.zr:=player.richtung; end else inc(player.zr1); end;} GFL.DrawText(IntToStr(PLayer.zr),300,400,16,clYellow,clRed); GFL.DrawRoateImage('A' + IntToStr(Player.typ),player.x,player.y,player.zr,0,1,0); end; das problem ist jetzt das der dreh winkel zu groß ist und ich würde auch noch gerne die geschwindigkeit einstellen können, wie mache ich dies genau ??? |
Re: DelphiX - Objekte drehen(Autos)
so ich habe jetzt mal etwas getestet, was leider auch nicht geht:
Delphi-Quellcode:
warum geht das nicht ??? habe ich aus einem tutor, das round habe ich selbst da hingeschrieben.....
if (Player.richtung >= 260) or (Player.richtung <-260) then Player.richtung:=0;
if KEY = VK_LEFT then Player.richtung:=Player.richtung-10; if KEY = VK_RIGHT then Player.richtung:=Player.richtung+10; if KEY = VK_UP then begin player.X :=round(player.X + Sin(player.richtung)*1.0); player.Y :=round(player.Y + Cos(player.richtung)*1.0); end; |
Re: DelphiX - Objekte drehen(Autos)
Delphi-Quellcode:
if (Player.richtung >= 360) then
Dec(Player.richtung, 360); if (Player.richtung < 0) then Inc(Player.richtung, 360); if KEY = VK_LEFT then Player.richtung:=Player.richtung-10; if KEY = VK_RIGHT then Player.richtung:=Player.richtung+10; if KEY = VK_UP then begin player.X :=round(Player.X+(Sin(player.richtung)*Player.Geschwindigkeit {oder so})); player.Y :=round(player.Y+(Cos(player.richtung)*Player.Geschwindigkeit {oder was Du eben hast})); end; So würde ich das machen. Und es kann angehen das der Drehwinkel nicht in in 360 Grad eingeteilt wird, sondern in 2*PI. Sprich 180° = PI und 360° = 2*PI. Um dann den korrekten Drehwinkel rauszukriegen musst Du rechnen:
Delphi-Quellcode:
Dann sollte das klappen.
winkel := (winkel/180)*PI;
|
Re: DelphiX - Objekte drehen(Autos)
das mit den 180 hatte ich auch schon versucht, aber das mit den klammern habe ich nicht, ich teste es gleich, wenn ich wieder zu hause bin !!!
|
Re: DelphiX - Objekte drehen(Autos)
deine idee hatte leider nicht funtkioniert!
aber ich habe es hier mit geschaft:
Delphi-Quellcode:
if keys[VK_UP] = True then Player.move:=-4;
if keys[VK_Down] = True then Player.move:=+4; if keys[VK_Left] = True then Player.richtung:=-4; if keys[VK_RIGHT] = True then Player.richtung:=+4; player.X :=Player.x + player.move * Cos( 2*pi/256*Player.roate+pi/2); player.Y :=Player.y + player.move * Sin( 2*pi/256*Player.roate+pi/2); Player.roate:=Player.roate + Round(player.richtung); GFL.DrawRoateImage('Ship',round(player.x),round(player.y),player.roate,0,0.5,0.5); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 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