Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [DelphiX] die Kamera bewegen (https://www.delphipraxis.net/75688-%5Bdelphix%5D-die-kamera-bewegen.html)

Nils_13 23. Aug 2006 15:55


[DelphiX] die Kamera bewegen
 
Hi,

wie kann ich die Kamera passend zu der Position meines Autos auf einer Karte bewegen ?
Delphi-Quellcode:
TCar = class(TImageSpriteEx)
  private
    speed: Single;
  public
    constructor Create(AParent: TSprite); override;
    procedure DoMove(MoveCount: Integer); override;
  end;

var
  frmMain : TfrmMain;
  Car    : TCar;

implementation

{$R *.DFM}

constructor TCar.Create(AParent: TSprite);
begin
  inherited Create(AParent);
  Speed := 0;
end;

procedure TCar.DoMove(MoveCount: Integer);
begin
  inherited DoMove(MoveCount);

  if (isLeft in frmMain.DXInput.States) and (speed <> 0) then
    if speed < 0 then
      Angle := angle + 1
    else
      Angle := angle - 1;

  if (isRight in frmMain.DXInput.States) and (speed <> 0) then
    if speed < 0 then
      Angle := angle - 1
    else
      Angle := angle + 1;

  if isUp in frmMain.DXInput.States then
  begin
    if speed < 7 then
      speed := speed + 0.05;
  end;

  if isDown in frmMain.DXInput.States then
  begin
    if speed < 7 then
      speed := speed - 0.05;
  end;

  X := X + cos256(Angle) * speed;
  if (x <= 0)(* or (x + width >= frmMain.DXDraw.Width)*) then
  begin
    x := x - cos256(Angle) * speed;
    speed := 0;
  end;

  Y := Y + sin256(Angle) * speed;
  if (y <= 0) or (y + height >= frmMain.DXDraw.height) then
  begin
    y := y - sin256(Angle) * speed;
    speed := 0;
  end;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  DXMap.LoadMap('map\maps\map2.dxm');

  Car := TCar.Create(DXSpriteEngine.Engine);
  with Car do
  begin
    Image := frmMain.DXImageList.Items.Find('Car');
    X := 150;
    Y := 380;
    Z := 0;
    Width := Car.Image.Width;
    Height := Car.Image.Height;
  end;
end;

// Interval=0
procedure TfrmMain.DXTimerTimer(Sender: TObject; LagCount: Integer);
begin
  DXInput.Update;
  DXSpriteEngine.Move(1);
  DXDraw.Surface.Fill(RGB(13, 180, 50));
  DXDraw.Surface.Fill(clBlack);
  SpriteEngineMap.Draw;
  DXSpriteEngine.Draw;
  DXDraw.Flip;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  if not (DXMap = nil) then
  begin
    DXMap.Free;
  end;
  if not (DXDraw = nil) then
  begin
    DXDraw.Free;
  end;
end;
[Edit]Sry, falsche Rubrik, könnt ihr "zur besseren Übersicht" verschieben.[/Edit]

Nils_13 24. Aug 2006 08:48

Re: [DelphiX] die Kamera bewegen
 
Ich komme so langsam von diesem Kartensystem ab, denn je größer die Karte ist, desto schlimmer ruckelt es. Wie könnte man denn anders eine Karte aus einer Datei laden ?

Wie muss ich den Code verändern, um die Geschwindigkeit miteinzubeziehen (die Variable speed sollte dabei helfen)?
Delphi-Quellcode:
SpriteEngineMap.Engine.X := -X + Engine.Width - Width;
SpriteEngineMap.Engine.Y := -Y + Engine.Height - Height;

Nils_13 25. Aug 2006 16:31

Re: [DelphiX] die Kamera bewegen
 
2. und letzter Push. :( :(

igel457 25. Aug 2006 17:19

Re: [DelphiX] die Kamera bewegen
 
Also, ich verstehe deine Frage ehrlich gesagt nicht richtig.

Du willst die Kamera hinter deinem Auto herfahren lassen.
Mit deinem Code "klebt" die Kammera am Auto.
Möchtest du, dass die Kammera beim beschleunigen zurückfällt oder so etwas?

Nils_13 26. Aug 2006 08:35

Re: [DelphiX] die Kamera bewegen
 
Ich möchte, dass die Kamera wie bei GTA2 immer beim Auto ist, denn das Spiel wird in Vogelsperspektive programmiert. Der obige Kameraverschiebcode ist übrigens nicht ganz richtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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