[XNA, .net] Input - Push

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Seraph
Site Admin
Beiträge: 1174
Registriert: 18.04.2002, 21:53
Echter Name: Steffen Engel

[XNA, .net] Input - Push

Beitrag von Seraph »

Ich bin gerade dabei mir das XNA anzusehen und mal abgesehen davon, dass ich mir unsicher bin, ob es eine gute Idee ist die bereits vorhandene Game-Klasse zu nutzen, bin ich im Moment ueber das vorhandene Input-System gestolpert, welches dem Anschein nach allein nach dem Poll-Prinzip funktioniert. Dieses mag in vielen Situationen seine Vorteile haben, aber imho auch in vielen Situationen seine Nachteile. Nun waere es kein so grosses Problem das Modell umzubauen und ein event-basiertes Input-System zu erstellen, jedoch kommen mir da irgendwie Zweifel am Sinn. Vielleicht ist meine Herangehensweise falsch oder vielleicht sollte ich etwas ganz anderes nutzen.

Als Beispiel nehme ich mal das Keyboard. Im Moment muss ich abfragen, welche Taste gedrueckt ist. Das ist soweit ja ganz toll, aber jeden fuer Dinge wie fortschrittliche GUIs kann das dann doch sehr schnell unuebersichtlich werden. Aber selbst wenn ich ein Push-Modell erstellen wuerde, muesste ich jeden Game-Tick saemtliche Tasten abfragen und mit den vorherigen vergleichen.

Ist es moeglich noch an das alte DInput unter .net/C# zu kommen? Sollte man vielleicht den Input vom Win-Control (Form) nutzen? Wie habt ihr das geloest?

PS: Und was haltet ihr von der Game-Klasse welche XNA bietet?
Benutzeravatar
Richard Schubert
Moderator
Beiträge: 106
Registriert: 27.02.2009, 08:44
Wohnort: Hohen Neuendorf (b. Berlin)
Kontaktdaten:

Re: [XNA, .net] Input - Push

Beitrag von Richard Schubert »

Game Class: Die ist doch voll in Ordnung, sollte man eigentlich nichts dran verändern und ist auch die Grundlage für jede Applikation ohne die deine Anwendung nicht auf der xbox läuft. Was gibt es denn für Bedenken?

Input: Keyboard ist nicht für Eingaben gedacht sondern nur für einen Ersatz am PC, für den Fall, dass man kein Gamepad hat. Für Texteingaben gibt es sonen Guide.TexteingabeDings. In einem Editorprojekt basierend auf XNA hatte ich auch mal DirectInput eingebaut, das hat gut funktioniert, solange man eben auf PC-Ebene bleibt.

Das Pollprinzip ist eigentlich perfekt für gängige Gameinputs. Wann genau außer bei Texteingaben ist das denn ein Nachteil?
Produktivität über Performance - XNA Creators Club
Seraph
Site Admin
Beiträge: 1174
Registriert: 18.04.2002, 21:53
Echter Name: Steffen Engel

Re: [XNA, .net] Input - Push

Beitrag von Seraph »

Die Game-Class bietet schon recht viel, aber z.B. keinen direkten Zugriff auf das darunter liegende Fenster. Mir ist klar, dass XNA speziell (urspruenglich) auf die XBox zugeschnitten ist, aber bei Editoren z.B. bekomme ich ohne dann wahrscheinlich Probleme. Andere Dinge wie z.B. das Komponenten-System hingegen sind aehnlich den Dingen was ich frueher selbst geschrieben habe. Von daher bin ich halt unschluessig. Aber ich bin froh wenn Du sagst, dass sie wohl "voll in Ordnung ist" :D, da ich Dich als einen in diesem Bereich erfahrenen Entwickler einschaetze (ich hoffe ich irre mich da nicht :P).
Richard Schubert hat geschrieben:Input: Keyboard ist nicht für Eingaben gedacht sondern nur für einen Ersatz am PC, für den Fall, dass man kein Gamepad hat.
Wenn ich das so lese kommt in mir die Frage auf, ob Du damit sagen moechtest, dass XNA nur fuer Konsolen oder Konsolenspiele am PC verwendbar ist, und PC-Spiele lieber mit etwas anderem entwickelt werden sollten?

Wie schon gesagt, dass Poll-Prinzip hat viele Vorteile, allerdings wenn man viele verschiedene Inputs (Texteingabe, Shortcuts in RTS, RPGs, ...) erwartet waere es imho mit dem Push-Prinzip guenstiger.
Benutzeravatar
Richard Schubert
Moderator
Beiträge: 106
Registriert: 27.02.2009, 08:44
Wohnort: Hohen Neuendorf (b. Berlin)
Kontaktdaten:

Re: [XNA, .net] Input - Push

Beitrag von Richard Schubert »

Vielleicht hilft dir dieses Sample beim Zugriff auf das Fenster weiter. Das Komponentensystem selbst verwende ich persönlich eigentlich nicht. Das ist mir nicht flexibel genug, aber hat sicher für das ein oder andere Problem seine Daseinsberechtigung.

PC Spiele würde ich auch generell mit XNA entwickeln. Wenn dich die Einschränkung der Plattform auf PC nicht stört, dann kannst du ohne Probleme DirectInput einsetzen, um die genannten Unzulänglichkeiten von XNA Input auszugleichen.
Produktivität über Performance - XNA Creators Club
Seraph
Site Admin
Beiträge: 1174
Registriert: 18.04.2002, 21:53
Echter Name: Steffen Engel

Re: [XNA, .net] Input - Push

Beitrag von Seraph »

Beim Sample vermeiden sie anscheinend die Game-Klasse, dadurch ist man aber was das Form selbst betrifft flexibler.

Eine weitere Frage sich aus deiner Antwort ergibt ist, wie ich nun an DInput rankomme, da es kein MDX mehr gibt. Ich habe mich eine ganze Weile nicht mit .net beschaeftigt, so habe ich vielleicht etwas uebersehen, was mir diesbezueglich weiter hilft. Oder muss ich die Funktionen der DLL manuell importieren?

Bei meiner Suche bin ich auf ein Stueck Code von Cygon getroffen, welcher einen Hook auf das Form praesentiert. Momentan liebaeugle ich auch mit dieser Moeglichkeit, da es mir momentan primaer um die Texteingabe geht. Was haeltst Du von dieser Moeglichkeit?
Benutzeravatar
Richard Schubert
Moderator
Beiträge: 106
Registriert: 27.02.2009, 08:44
Wohnort: Hohen Neuendorf (b. Berlin)
Kontaktdaten:

Re: [XNA, .net] Input - Push

Beitrag von Richard Schubert »

Ja stimmt, ich hatte dafür das alte Manged DirectX verwendet. Ich benötigte es für die absolute Mausposition, welche über XNA nur relativ war. Oder war es andersherum?

Falls du nur die Tastatur benötigst, ist das KeyPreview Feature der Form natürlich ideal. Würde ich genauso machen.
Produktivität über Performance - XNA Creators Club
Antworten