AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DelphiX - Objekte drehen(Autos)
Thema durchsuchen
Ansicht
Themen-Optionen

DelphiX - Objekte drehen(Autos)

Ein Thema von mimi · begonnen am 4. Sep 2004 · letzter Beitrag vom 11. Sep 2004
Antwort Antwort
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

DelphiX - Objekte drehen(Autos)

  Alt 4. Sep 2004, 17:53
[/delphi]Hallo,
ich möchte ein kleines auto spiel schreiben und habe probleme mit dem drehn des autos:
Delphi-Quellcode:
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;
Const:
Delphi-Quellcode:
const
  lings = 60;
  rechts = 60;
  oben = 257;
  Unten = 130;
ich habe mir eine kleine grafik lib geschrieben dort habe ich den befehl DrawRoate verwendet:
Delphi-Quellcode:
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;
aufrufen tue ich den so:
Delphi-Quellcode:
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;
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 !!


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 ???
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#2

Re: DelphiX - Objekte drehen(Autos)

  Alt 5. Sep 2004, 09:04
so ich habe jetzt mal etwas getestet, was leider auch nicht geht:
Delphi-Quellcode:
 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;
warum geht das nicht ??? habe ich aus einem tutor, das round habe ich selbst da hingeschrieben.....
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Thebe

Registriert seit: 25. Jul 2004
Ort: Wedel
78 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: DelphiX - Objekte drehen(Autos)

  Alt 5. Sep 2004, 22:11
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:
winkel := (winkel/180)*PI; Dann sollte das klappen.
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#4

Re: DelphiX - Objekte drehen(Autos)

  Alt 6. Sep 2004, 16:18
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 !!!
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#5

Re: DelphiX - Objekte drehen(Autos)

  Alt 11. Sep 2004, 18:10
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);
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz