![]() |
DelphiX = CPU-Killer???
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Ich habe folgendes Problem: Ich hab eine Fläche von 950x570 Pixel und einen Ball der Größe 38x38! Dieser soll über diese Fläche bewegt werden. Das geht auch problemlos! Mit nur einem nachteil. Der Ball "geht" äuerst ruckartig und CPU-Auslastung = 100 %. Das kann doch nicht sein, oder? Am Rechner liegst nicht, der iss realtiv neu! Wo liegt das Prob? Source lege ich mal bei! ciao und danke schonmal fkerber |
Re: DelphiX = CPU-Killer???
Hmm,
wird -> DxDraw1.Surface.LoadFromFile('C:\dokumente und einstellungen\test\desktop\bild1.bmp'); in jedem Timereregnis aufgerufen? Wenn ja, muss Das Programm doch immer wieder auf die Platte zugreifen... Ich kann das bei mir leider nicht testen, weil ich die Komponenten nicht habe. |
Re: DelphiX = CPU-Killer???
Timer Intervall?
|
Re: DelphiX = CPU-Killer???
Hi!
@axelf98: Ja, das wird immer wieder geladen, das könnte ein Grund sein, allerdings folgt dann meine Frage, wie ich das anders machen könnte, weil ich den Hintergrund ja immer "reseten" muss, damit man nicht sozusagen die Ball-Spur sieht! @luckie: Beim geposteten Code 1, aber auch bei 100 oder selbst bei 1000 ruckelts! ciao fkerber |
Re: DelphiX = CPU-Killer???
Nun ja, bei 1000 auch kein Wunder, das ist eine Sekunde.
|
Re: DelphiX = CPU-Killer???
Hi!
Das ist schon klar, ich meine auch kein Ruckeln im Sinne von Ballsprüngen oder so, sondern mehr so ne Art Verzögerung. Bei Intervall=1 merkt man das bei mir ganz doll. Man merkt dann, dass es keine flüssige Bewegung ist! ciao fkerber |
Re: DelphiX = CPU-Killer???
Hmm, ich kenn jetzt deine Komponeten nicht, aber gibt es nicht einen refresh oder repaint Befehl?
|
Re: DelphiX = CPU-Killer???
Eigentlich sollte der Ball keine Spur ziehen. Die Graka setzt das Bild ja jedesmal neu zusammen. Du brauchst die Texturen also nur einmal laden.
|
Re: DelphiX = CPU-Killer???
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
@anku: Siehe Attachment: Ohne den Neuladen-Befehl bei jedem Timer-Event zieht der Ball ne ganz schöne Spur! Ich benutze DelphiX für Delphi6 Personal! ciao fkerber |
Re: DelphiX = CPU-Killer???
Moin fkerber,
ich kenn' mich jetzt mit DirectX nicht so sonderlich aus, deshalb kann meine Idee auch völlig daneben sein: So wie Dein Screenshot aussieht habe ich die Vermutung, dass Du vor dem Neuzeichnen des Balles das Bild des vorherigen erst einal entfernen und den Hintergrund restaurieren musst. |
Re: DelphiX = CPU-Killer???
ich kenne mich gar nciht in delphix aus, aber könnte man nicht jedes mal zuerst den ball sozusagen löschen oder unsichtbar machen und auf die neue stelle legen und dann wieder sichbar?
|
Re: DelphiX = CPU-Killer???
Hi!
@Christian: Das mache ich ja auch normalerweise, indem ich das Hintergrundbild bei jedem Schleifen-Durchlauf neu lade! Ich hab den Screenshot nur ohne das gemacht, weil anku meinte, dass das nicht nötig wäre! @gregor: Das wäre eine möglichkeit, wenn ich wüsste wie! Ich glaub der ball wird direkt auf den Untergrund gezeichnet, also muss ich den immer wieder erneuern! Allgemein: Ich glaube aber, dass es gar nicht am Neuladen des Hintergrunds liegt! Auch wenn ich das Rauslasse, also nur Ball auf schwarzem Untergrund, hab ich ne CPU-Auslastung > 90% nur durch mein Prog! Ich weiß echt keine Lösung! Ciao fkerber |
Re: DelphiX = CPU-Killer???
Bist du sicher, dass du den Sprite-Engine richtig benutzt?
|
Re: DelphiX = CPU-Killer???
Hi!
Zitat:
Ich bin mit DelphiX echt noch Neuling und deshalb komplett ratlos!
Delphi-Quellcode:
Das ist alles was ich mit der Spriteengine mache!
DXSpriteEngine1.Move(1);
DXSpriteEngine1.Draw(); // Draw the sprites onto the back buffer Die move-Funktion ist ja oben in dem Anhang drin! ciao fkerber |
Re: DelphiX = CPU-Killer???
ich hatte vor 2 jahren mal ein snake-artiges prog erstellt. da sah die timerschleife so aus:
Delphi-Quellcode:
DXDraw.Surface.Fill(1);
DXSpriteEngine1.Move(1); DXInput1.Update; DXSpriteEngine1.Dead; DXSpriteEngine1.Draw; DXDraw.Flip; |
Re: DelphiX = CPU-Killer???
Hi!
@anku: Dann zieht der Ball zwar keine Spur mehr, aber das liegt ja daran, dass die Oberfläche immer schwarz gemacht wird bei jedem Durchlauf! Somit ist mein Hintergund auch weg! Und selbst dann fliegt der Ball nicht gleichmäßig, sondern verzögert mittendrin manchmal! ciao fkerber |
Re: DelphiX = CPU-Killer???
Dann schmeiss mal das
Code:
raus.
DXDraw.Surface.Fill(1);
|
Re: DelphiX = CPU-Killer???
Hi!
Tja auch die "Snake-Schleife" nützt nix! Immer noch "Ballspur" und Verzögerung! ciao fkerber |
Re: DelphiX = CPU-Killer???
dann benutz für den hintergrund doch ein "TBackGroundSprite".
das fill muss doch bleiben ;) |
Re: DelphiX = CPU-Killer???
Hi!
Und wo finde ich das TBackgroundSprite? Ist das ne zusätzliche Komponente? ciao fkerber |
Re: DelphiX = CPU-Killer???
Delphi-Quellcode:
Ich hab die DelphiX Komponente nicht mehr drauf, kann dir also nicht sagen in welcher Unit die Klasse TBackGroundSprite sich befindet. Müsstest du also mal ein bisschen suchen. Ich glaub aber die is in der Sprite Unit mit drin. Du kannst dir ja mal die Beispiele angucken, die waren eigentlich recht leicht verständlich.
var Back: TBackGroundSprite;
Back := TBack.Create(DXSpriteEngine1.Engine); Back.Image := DXImageList.Items.Find('Background'); back.Height:=480; back.Width:=640; Back.Z := -2; Back.Tile := True; |
Re: DelphiX = CPU-Killer???
Hi!
Danke erstmal! Wo schreib ich das hin, wie wird das aufgerufen? ich hab keine Beispiel zu DelphiX, sorry! ciao fkerber |
Re: DelphiX = CPU-Killer???
Wie wärs wenn du die Datei nicht jedes mal von der Festplatte ziehst sondern in einer ImageList oderso speicherst....einmal von der Platte gelesen und dann immer aus der Imagelist....gehtwesentlich besser !!!
CrashMan |
Re: DelphiX = CPU-Killer???
Hi!
Auch aus ner Image-List ist es so ram-fressend! Ciao fkerber |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 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