Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.03.2015, 10:46

Control und View als seperate Programme (Windows)

Ich habe mein Programm in 5 Programme aufgeteilt (View, Control, Kollision, K.I. und mein Server) und lasse sie über TCP/IP kommunizieren, mein Problem ist, das mein Input-Programm keine Windows Nachrichten erhält, da das View-Programm den Fokus hat -,-

Hinweis : Es können auf einem Rechner gleichzeitig mehrere View-Programme laufen aber immer nur ein Control-Programm !
Mit dem XBox-Controler und XInput ist das übrigens kein Problem, nur Raw-Input geht aktuell nicht.

Es besteht die Möglichkeit die View-Programme über das Control-Programm zu starten, von daher überlege ich, ob ich mein Problem mit CreateProcess lösen könnte oder als 2. Idee, mit Hooks.

Gibt es noch andere Möglichkeiten unter Windows, ist mein Problem mit CreateProcess überhaupt lösbar ?

Ich verzweifle noch :dash:

Edit :
Ich verwende Code::Blocks mit dem GCC und es muß ab Win7 laufen und nach Möglichkeit seit XP (bisher ist alles ab XP unterstützt)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »OOTD« (03.03.2015, 11:05)


DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

03.03.2015, 11:22

Warum 5 Programme?
Der Client sollte Grafik und Eingabe halten, dann noch Kollision und KI um nicht zwangsläufig auf die Antwort des Servers warten zu müssen.
Der Server hält den Zustand und berechnet ihn neu, Grafik und Eingabe sind dementsprechend nicht nötig.
Dazwischen steht die Netzwerkkomponente über die beide kommunzieren. Wobei der Server direktiv sein sollte.

3

03.03.2015, 11:50

Ich suche schon den 2. Tag nach einer Lösung und bin nie auf Idee gekommen mein Gedankenkonstrukt zu überdenken :dash:

Mein Gedanke wahr halt, das ich nur ein Control für alle Views brauche, doch ich löse das nun durch viele Fenster aus einer Anwendung (View-Control-Programm).

Danke für die Antwort, manchmal fixiert man sich zu sehr auf ein Problem und bekommt den Tunnelblick oO

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

4

03.03.2015, 12:30

Kann es sein dass du das MVC Pattern für ein Spiel anwenden willst?
Das klingt auf jeden Fall so und ist nicht was du willst. Keep it simple, der Client ist ein Programm, der Server das zweite.
Nebenbei: auch beim MVC gibt es nur ein Programm am Ende, es geht dabei eher um die Trennung Logik/visuelle Repräsentation.

5

03.03.2015, 13:02

Der Gedanke ist dem Prinzip entsprungen, das es da bei nicht um getrennte Programme geht war und ist mir bewußt ;)
Doch ich hatte vor, den View Open-Source zu machen, da sich mein Spiel gut zum erstellen von anderen spielen eignet und man dort dann sicher auch andere Grafik möchte (die Steuerung ermöglicht aber schon alle Möglichkeiten die mir Sinnvoll erscheinen, daher wollte ich dessen Quellcode eigentlich nicht veröffentlichen) ;)
Doch da das dermaßen kompliziert ist, lasse ich es (dann müssen meine begrenzten Möglichkeiten reichen (so hätte halt jeder Shader o.ä. einbauen können).

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

03.03.2015, 15:33

Du könntest ein Interface zur Steuerung deines Spiels definieren dass du dann in deinem closed-source implementierst.
Dann lieferst du diesen nicht mit dem Rest des Codes aus und hast beides, in einem Programm. Natürlich ist es dann so direkt nicht lauffähig, da die Leute die Schnittstelle selbst implementieren müssen.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

7

03.03.2015, 15:49

Ich kann zwar nicht wirklich nachvollziehen, wofür bei einem Spiel mehrere Fenster erforderlich sein sollen, diese aber über ein einzelnes Programm zu erzeugen ist definitiv besser, als mehrere Programme zu erfordern.

(die Steuerung ermöglicht aber schon alle Möglichkeiten die mir Sinnvoll erscheinen, daher wollte ich dessen Quellcode eigentlich nicht veröffentlichen)
Einerseits sehe ich die "Vollständigkeit" nicht als Kriterium für oder gegen eine Offenlegung des Quelltextes, andererseits könnten dennoch noch andere Steuerungsmöglichkeiten relevant sein, die dir nur jetzt gerade nicht einfallen.

Insgesamt scheint es mir so, als würdest du dir sehr viele Gedanken um die Modifizierbarkeit deines Spiels machen. Für den Anfang wäre es wahrscheinlich sinnvoller, das Spiel selbst fertigzustellen. Solange das Spiel keinen ausreichenden Stand hat, wird es wahrscheinlich nicht genug Spieler finden, als dass unter diesen sich wieder welche finden würden, die an der Modifikation des Spiels interessiert sein könnten. Und meiner Meinung nach ist ein modifizierbares, aber unfertiges Spiel weniger gut, als ein fertiges, aber nicht für Modifizierbarkeit optimiertes Spiel. ;)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

8

03.03.2015, 16:27

Der Grund für mehrere Fenster ist, das man mit bis zu 4 Spielern an einem PC spielen können soll und mit 4 Fenstern geht das dann ohne Splitscreen (dank Raw-Input geht das auch mit 4 Mäusen und 4 Tastaturen) ;)
Ich habe mir tatsächlich viel Mühe mit der Modifizierbarkeit gegeben, doch die ist für mein Spiel unabdingbar, da ich dem Meister (so wie in den guten alten Pen & Paper Rollenspielen) möglichst viele Freiheiten bieten möchte !

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

03.03.2015, 16:51

Aber nur an einem Rechner mit min. 4 Bildschirmen (die nicht vom Treiber zu 1 Bildschirm zusammengefasst werden), würden die Lösung mit den Fenstern keinem Splitscreen gleichkommen. Andernfalls müssen mehrere der Fenster auf einem Bildschirm positioniert werden und man hat im Grunde wieder einen Splitscreen, nur dass der Rahmen der Fenster mehr Platz wegnimmt.

Du musst bei normalen Spielern davon ausgehen, dass sie keine Ahnung vom Programmieren haben und sich das Spiel somit nicht selbst anpassen werden. Sinvoll wäre es, bereits vorher gewisse Anpassungsmöglichkeiten (vergleichbar der Modifikatoren aus Unreal Tournament, Spezialregeln aus Super Smash Bros etc.) zu bieten, auf die im Normalfall zurückgegriffen werden kann. (Für Beispiele müsste ich mehr über das Spiel wissen...)
Idealerweise sind diese am Ende so gestaltet, dass Modder weitere hinzufügen können, die ggf. bei einer Partie zusätzlich aktiviert werden können.

Je nach Spiel könnte es auch eine Überlegung wert sein, statt alles an einem Rechner machen zu wollen, eine Netzwerkkommunikation und mehrere Clients dafür zu verwenden. So können die Clients auf unterschiedlichen Rechnern laufen, jeder mit seinem eigenen Fenster, und es wäre kein Splitscreen notwendig.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

10

28.03.2015, 17:20

Thx für die Antworten, ich habe auf euch gehört und alles in ein Programm gepackt (außer natürlich den Server), nun will ich Threads nutzen, da es sich durch mein Design gerade zu aufdrängt um die Performance zu verbessern.
Ich habe im Grunde auch alles verstanden (POSIX-Threads), doch mir stellt sich da bei eine generelle Frage.
Wenn ich jetzt meinen Input-Thread mache, der einfach so oft wie möglich die Eingabegeräte abfragt und Änderungen abspeichert oder alternativ zurück gibt woraufhin der Haupt-Thread sie dann abspeichert, starte und beende ich für jeden Durchgang einen Thread oder läßt man den Thread quasi in Endlosschleife laufen (macht das Performance-technisch starke Unterschiede oder ist es egal wie ich das handhabe) ?

Werbeanzeige