Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bilder / Objekte in Delphi bewegen (https://www.delphipraxis.net/55821-bilder-objekte-delphi-bewegen.html)

sirblack 27. Okt 2005 13:06


Bilder / Objekte in Delphi bewegen
 
Hallo, ich habe mich jetzt seit einiger Zeit mit Delphi beschäftigt. Habe jetzt vor ein Spaceshooter Spiel zu programmieren. Bin jetzt aber an nem Problem angekommen wo ich mir nicht mehr zu helfen weiß. Da TTimer zu langsam war, wollte ich TDXTimer verwenden. Aber der funktioniert nicht, da ich ihn nach dem erstellen erst deaktiviern muss und ihn dann aktivieren muss. Dadurch wird beim erstellen eines zweiten Timers der erste deaktiviert.
Wie kann ich das Problem umgehen?

Hier der Quelltext

Delphi-Quellcode:
unit Schuss;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Figur, Forms,Graphics,
  Dialogs, ExtCtrls,DXClass;

type
  TSchuss = class(TImage)
  private
  ZTimer : TDXTimer;
  ZForm: TForm;
  ZSchuss: TIMage;
  procedure bewegen(Sender: TObject; LagCount: Integer);
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
        constructor erstelle(X,Y :integer; Formular: TForm);
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
  end;



procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TSchuss]);
end;

constructor TSchuss.erstelle(X,Y : integer; Formular: TForm);
begin
 ZForm:=Formular;
 ZSchuss := TImage.create(ZForm);
 ZSchuss.parent := ZForm;
 ZSchuss.picture.loadfromfile('schuss.bmp');
 ZSchuss.setbounds
               (X,Y,5,7);
 ZSchuss.Transparent := false;
 ZSchuss.Stretch := true;

 ZTimer := TDXTimer.create(ZForm);
 ZTimer.Interval := 10;
 ZTimer.ActiveOnly :=true;
 Ztimer.Enabled := false;
 ZTimer.Enabled := true;
 ZTimer.OnTimer := bewegen;


end;

procedure TSchuss.bewegen(Sender: TObject; LagCount: Integer);
begin

 ZSchuss.Top := ZSchuss.Top - 20;
 //if ZSchuss.Top <= 0
 //then Zschuss.Destroy;
end;

end.

Angel4585 27. Okt 2005 13:13

Re: Bilder / Objekte in Delphi bewegen
 
TTimer zu langsam? hast du auch das Intervall runter gesetzt?

Khabarakh 27. Okt 2005 13:24

Re: Bilder / Objekte in Delphi bewegen
 
Herzlich Willkommen in der DP :) !

Dein Ansatz hat zwei Fehler:
  • Du verwendest für jedes Objekt einen eigenen Timer. Nimm besser einen globalen Timer für alle Objekte, damit hast du gleichzeitig dein Problem mit mehreren Timern gelöst.
  • Du verwendest für jedes Objekt ein eigenes Image. Auch das solltest du global mit einem Image, das das ganze Spielfeld beinhaltet, lösen. Images sind einfach nicht zum Bewegen gedacht. Hier im Forum suchenOffScreenBitmap

robinWie 28. Okt 2005 18:41

Re: Bilder / Objekte in Delphi bewegen
 
Hallo,

ich habe schon einige male versucht ein Spielchen mit einen Image zu programmieren.
Das Problem das Image blinkt beim bewegen!

Robin

Khabarakh 28. Okt 2005 18:45

Re: Bilder / Objekte in Delphi bewegen
 
Schau mal einen Post über deinen :wink:
Zitat:

Images sind einfach nicht zum Bewegen gedacht.
Zitat:

Auch das solltest du global mit einem Image, das das ganze Spielfeld beinhaltet, lösen.
Zitat:

Zitat von Khabarakh

Damit wirst nie wieder irgendetwas flimmern sehen.
(evt. noch DoubleBuffered = true. Das ist aber kein echter Ersatz für oben Genanntes)

sirblack 3. Nov 2005 12:48

Re: Bilder / Objekte in Delphi bewegen
 
Ok, wie mach ich das genau mit diesem OffScreenBitmap??? Kenn mich nich so sehr aus...

DGL-luke 3. Nov 2005 14:08

Re: Bilder / Objekte in Delphi bewegen
 
Off|screen|bit|map, das,
1. konkret: ->Bitmap, das nicht angezeigt wird.
2. als Technik in der Programmierung: auf ein Offscreenbitmap (->1.) wird die komplette darzustellende ->Szene gezeichnet und das Bitmap dann auf ein darstellendes ->Control übertragen. Gegenüber dem direkten ->Zeichnen auf die ->Leinwand eines ->Formulars hat diese technik den Vorteil, das kaum Flimmern auftritt und die komplette Szene gleichzeitig gezeichnet wird.

Hoffe das reicht. :stupid:

In Deutsch: Du zeichnest alles in ein TBitMap und weist dieses dann einem TImage zu.

Master_RC 3. Nov 2005 15:04

Re: Bilder / Objekte in Delphi bewegen
 
Begründung:
Weil der RAM um einiges schneller als die Festplatte ist ;)

Khabarakh 3. Nov 2005 15:11

Re: Bilder / Objekte in Delphi bewegen
 
Und ein Beispielcode:
http://luckie-online.de/Developer/De...eenBitmap.html

sirblack 17. Nov 2005 12:50

Re: Bilder / Objekte in Delphi bewegen
 
So weit ganz ok, hab das zwar jetzt noch nicht mit Offscreenbitmap, habe aber einen Globalen timer der alles bewegt. Die erstellten Objekte werden in einer Liste eingetragen und dann bewegt. Nun ist meine nächste Frage wie kann ich möglichst einfach eine Kollision abfragen? Erstell ich dazu ein Arry das die Koordinaten der einzelnen Bitmaps aufnimmt? Kann ich dann nich überprüfen lassen ob diese Bitmaps übereinander liegen und dann diese jeweils aus den Listen löschen lassen?


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