Autor |
Beitrag |
jackie05
      
Beiträge: 357
|
Verfasst: Mi 11.04.12 18:29
Hallo,
ich habe folgendes Problem, und zwar habe ich ein Spiel in einer anderen Programmiersprache geschrieben "BlitzMax", wenn ich das Fenster dann verschieben möchte, friert das Spiel ein, also es wird angehalten, bis man die Maustaste wieder los gelassen hat.
Genau das möchte ich mit einer Delphi DLL verhindern.
Hier ist mal ein ausschnitt von blitzforum.de:
Quelltext 1:
| Wenn du aber den Windows eigenen Rahmen beibehalten willst, musst du dir eine DLL coden, die ein WndProc beinhaltet und die Nachricht abfängt und behandelt, und alle anderen an den alten WndProc weitergibst. Allerdings könnte das etwas komplizierter werden, durch die benötigte DLL. |
Wie könnte man das in einer DLL lösen?
Ich bedanke mich schonmal im Voraus.
MfG
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: So 15.04.12 02:23
Weiss denn keiner wie man das lösen könnte?
Mein Spiel, das ich in einer anderen Programmiersprache geschrieben habe, wird das Spiel eingefrohren, sobald ich das Spiel-Fenster verschieben möchte.
Kann man das nicht irgendwie mit einer DLL lösen?
MfG
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 15.04.12 07:15
Das liegt nun einmal an der Umsetzung. Wenn man nicht DirectX oder ähnliches nutzt, ist das normal. Und das passiert in Delphi ja genauso, wenn man ohne DX arbeitet.
Und was du mit einer DLL ändern wollen würdest ist mir ohnehin nicht klar.
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: So 15.04.12 15:33
Danke Dir.
Ich hab mal ein kleines Video erstellt, um das Problem besser zu erklären:
www.youtube.com/watch?v=7_cTseAVzPQ
Hier läuft z.B. ein Countdown, aber sobald ich das Fenster mit der Maus verschieben möchte, wird der Countdown angehalten und wenn ich die Maustaste wieder los lasse, dann läuft der Countdown weiter.
Es wird einfach eingefrohren, sobald ich das Fenster verschieben möchte und das Problem möchte ich beheben.
Hier habe ich mal ein Teil von blitzforum.de kopiert wie man das Problem lösen könnte:
Das ist leider ein Problem von der Blitz internen Nachrichten-Verwaltung. Du könntest diese Nachrichten abfangen, jedoch müsstest du dich da einer DLL bedienen.
Ist das denn eigentlich möglich, das über DLL zu lösen?
MfG
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: So 15.04.12 15:58
Hi, hält da immer das komplette Programm an oder ist es nur in deinem Beispiel so das alles stehen bleibt? Denn wenn nur der Renderer anhält verstehe ich das. Aber wenn alles anhält würde ich sagen Designfehler. Denn das bedeutet ja dann auch, wenn der Renderer mit dem produzieren von Frames nicht mehr nachkommt, das Spiel langsamer wird.
Aber eigentlich könnte man das ja auch als gewollt betrachten. Denn wenn man ein Spiel hat, fürs schreiben von Spielen ist Blitzbasic ja da, was man übers Display schiebt spielt man ja nicht.
@ jaenicke: Blitzbasic und dessen Nachfolger verwenden DirectX und Dicrect3D zum Rendern.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: So 15.04.12 16:17
Das wird immer komplett angehalten, es liegt an BlitzMax generell.
Man müsste das doch irgendwie lösen können.
MfG
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 15.04.12 22:19
jackie05 hat folgendes geschrieben : | Man müsste das doch irgendwie lösen können. |
Man ja, aber nicht unbedingt du.  Ich weiß nicht wie viel von dem Quelltext du bekommst, wenn du das kaufst, aber vielleicht lässt sich damit etwas machen. Jedenfalls wird sich das Verhalten ziemlich sicher nur über eine Modifikation des Codes der Engine selbst lösen lassen. Und wenn du den nicht bekommst, kannst du da auch nix machen.
Auf jeden Fall kenne ich das von DirectX-basierten Spielen normalerweise nicht. Insofern sehe ich das wie Sinspin: Das ist eben ein Designfehler der Entwickler.
Nebenbei:
Was dich an dem Verhalten stört, verstehe ich allerdings weniger. Wie oft verschiebt man denn ein Spiel und was macht es, wenn das dabei stockt? 
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: So 15.04.12 23:19
Danke Dir.
Ich habe ein Online Spiel geschrieben und dort macht es schon was aus, wenn der Server z.B. kurz das Fenster zur Seite schiebt und bei den Clienten es dann so aussieht, als es laggen tut wenn mal kurz keine Daten ankommen.
Dann werde ich es halt so lassen, wenn es keine möglichkeit gibt, das Problem von mir aus zu beheben.
Ich danke euch trotzdem für die Hilfe.
MfG
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 16.04.12 00:09
Laut diesem Thema gibt es sogar BlitzMax-Code, der das Problem beheben soll. Hilft dir das weiter?
|
|
|