AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [DelphiX] Ruckelproblem wegen zu hoher Grafikqualität
Thema durchsuchen
Ansicht
Themen-Optionen

[DelphiX] Ruckelproblem wegen zu hoher Grafikqualität

Ein Thema von Nils_13 · begonnen am 22. Aug 2006 · letzter Beitrag vom 23. Aug 2006
Antwort Antwort
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

[DelphiX] Ruckelproblem wegen zu hoher Grafikqualität

  Alt 22. Aug 2006, 21:50
Hi,

wenn bei DelphiX die Grafikqualität zu hoch ist (GTA2-Niveau), dann ruckelt es, wenn der Timer eine Bewegung zu rendern hat. Hat jemand von euch eine Idee, wie man eine Straße mit einer eigentlich schlechteren Grafikqualität dennoch gut aussehen lassen kann ? Im Anhang wird gezeigt, bei welcher Grafik es ruckelt.
Miniaturansicht angehängter Grafiken
grafikqualit_t_200.png  
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

Re: [DelphiX] Ruckelproblem wegen zu hoher Grafikqualität

  Alt 22. Aug 2006, 21:55
Ich kann mir nicht vorstellen, dass es von diesem Bitmap beginnt zu ruckeln.

Wie wäre es mit etwas Code?

//EDIT:
Was ist an dieser Grafik so "hoch-qualitativ" als an anderen? Ist das 32Bit?
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: [DelphiX] Ruckelproblem wegen zu hoher Grafikqualität

  Alt 23. Aug 2006, 09:42
Wenn ich die Grafik mit Paint erstellen würde, würde es laufen. Hier der Code:
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);
  with DXDraw.Surface.Canvas do
  begin
    Brush.Style := bsClear;
    Font.Size := 12;
    Font.Color := clRed;
    TextOut(0,0, 'FPS: ' + IntToStr(LagCount));
    Release;
  end;
  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;
Falls du die DXMap noch nicht hast, findest du sie im Anhang. Du musst aber DelphiX deinstallieren und dann diese Version neuinstallieren, wenn du direkt das map-Package installieren willst, bekommst du eine AV.
Angehängte Dateien
Dateityp: rar map_157.rar (2,31 MB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#4

Re: [DelphiX] Ruckelproblem wegen zu hoher Grafikqualität

  Alt 23. Aug 2006, 11:30
Zitat von Nils_13:
Delphi-Quellcode:
procedure TfrmMain.DXTimerTimer(Sender: TObject; LagCount: Integer);
begin
  DXInput.Update;
  DXSpriteEngine.Move(1);
  DXDraw.Surface.Fill(RGB(13, 180, 50));
  DXDraw.Surface.Fill(clBlack);
  with DXDraw.Surface.Canvas do
  begin
    Brush.Style := bsClear;
    Font.Size := 12;
    Font.Color := clRed;
    TextOut(0,0, 'FPS: ' + IntToStr(LagCount));
    Release;
  end;
  SpriteEngineMap.Draw;
  DXSpriteEngine.Draw;
  DXDraw.Flip;
end;
d'oh
Du vermischst DirectX und GDI. Wenn du mit DirectX(/DelphiX) arbeitest, vergiss, dasses soetwas wie den Canvas ueberhaupt gibt.
DXDraw sollte eigentlich eigene Methoden zum Zeichnen von Text mitbringen, in meinen Augen wirkt das Schreiben auf den Canvas wie ne gezogene Handbremse

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
pacman1986

Registriert seit: 11. Feb 2005
Ort: Kirchhain
498 Beiträge
 
Delphi 2005 Personal
 
#5

Re: [DelphiX] Ruckelproblem wegen zu hoher Grafikqualität

  Alt 23. Aug 2006, 13:21
ich hatte dieses Ruckel Problem auch aber bei einer 30 mb großen Grafik. Ich hab das gelöst indem ich das in den Arbeitsspeicher geschrieben habe.
Wenn du die Bilder in der DXImagelist hast kannst du dann wenn du auf das bild in der liste klickst (OI) SystemMemory auf true setzen
Christian N.
Designed to make a difference

najjaronline.de
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#6

Re: [DelphiX] Ruckelproblem wegen zu hoher Grafikqualität

  Alt 23. Aug 2006, 16:53
SystemMemory stand schon auf True. Mikes Lösung ist dir richtige, es ruckelt nur noch leicht. Danke!
  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 01:34 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