![]() |
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. |
Re: Bilder / Objekte in Delphi bewegen
TTimer zu langsam? hast du auch das Intervall runter gesetzt?
|
Re: Bilder / Objekte in Delphi bewegen
Herzlich Willkommen in der DP :) !
Dein Ansatz hat zwei Fehler:
|
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 |
Re: Bilder / Objekte in Delphi bewegen
Schau mal einen Post über deinen :wink:
Zitat:
Zitat:
Zitat:
(evt. noch DoubleBuffered = true. Das ist aber kein echter Ersatz für oben Genanntes) |
Re: Bilder / Objekte in Delphi bewegen
Ok, wie mach ich das genau mit diesem OffScreenBitmap??? Kenn mich nich so sehr aus...
|
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. |
Re: Bilder / Objekte in Delphi bewegen
Begründung:
Weil der RAM um einiges schneller als die Festplatte ist ;) |
Re: Bilder / Objekte in Delphi bewegen
|
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 23:37 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