Entwickler-Ecke

Dateizugriff - Fragen zu DLL?


jackie05 - Mi 11.04.12 18:29
Titel: Fragen zu DLL?
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 - 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 - 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 - So 15.04.12 15:33

Danke Dir.

Ich hab mal ein kleines Video erstellt, um das Problem besser zu erklären:
http://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 - 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.

@user profile iconjaenicke: Blitzbasic und dessen Nachfolger verwenden DirectX und Dicrect3D zum Rendern.


jackie05 - 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 - So 15.04.12 22:19

user profile iconjackie05 hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconSinspin: 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? :gruebel:


jackie05 - 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 - Mo 16.04.12 00:09

Laut diesem Thema [http://www.blitzmax.com/Community/posts.php?topic=66207] gibt es sogar BlitzMax-Code, der das Problem beheben soll. Hilft dir das weiter?