Graphische Benutzerschnittstelle

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Antworten
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Graphische Benutzerschnittstelle

Beitrag von exploid »

Hallo

Ich würde euch gerne mein aktuelles Projekt zeigen. Es wird an einer grafischen Schnittstelle zwischen Benutzer und Computer gearbeitet die innerhalb einer DirectX Anwendung abgearbeitet wird. Hierbei sind geplant bekannte Steuerelemente wie Button, Textfeld, Combobox, Checkbox sowie benutzerdefinierte Steuerelemente zu realisieren. Fertig ist bisher der Button. :) Die Kosmetik also die Bitmaps für die Steuerelemente sind frei wählbar und in allen gängigen Grafikformaten definierbar. Alles ist selbst programmiert ohne bestehende Bibliotheken zu verwenden außer den Standardbibliotheken. Eingabegeräte (Maus, Tastatur) werden mit dem uralten Directinput abgefragt.
Bild

Programmiertechnisch ist alles in C/C++ geschrieben. Die Steuerelementklasse ist einmal definiert da Daten wie Position, Breite, Höhe für alle SE gleich relevant ist und wird an die anderen SE-Klassen vererbt.

Die Steuerelemente befinden sich alle in einer baumartigen Liste aus Zeigern und/oder zeigen auf Geschwisterelemente wie z.B. bei dem Kombinationsfeld welches zusammengesetzt sein wird aus bekannten SE wie Button und Textfelder. Bedeutender Vorteil hierbei ist, dass nur die Steuerelemente berücksichtigt werden müssen innerhalb dessen sich der Mauszeiger befindet. Das ist schnell programmierbar und wird schnell abgearbeitet auf diese Weise. Es können rekursive Funktionen verwendet werden.
All your base are belong to us! Justice
Benutzeravatar
Sacaldur
Beiträge: 13
Registriert: 09.10.2012, 12:07
Wohnort: Berlin

Re: Graphische Benutzerschnittstelle

Beitrag von Sacaldur »

Mich würden noch folgende Dinge interessieren, die bisher nicht erwähnt wurden:
Wie kann man die Steuerelemente animieren? (Vielen dürfte es nicht reichen einfach nur 3 Grafiken verwenden zu müssen)
Wie kann man Layouts definieren?
Oder muss man jede Komponente einzeln mit Koordinaten und Größe bestücken?
Bei den Koordinaten wäre es zwar möglich, wenn auch nicht schön, bei der Größe aber nicht immer. (Bspw. wenn sich die Größe nach dem Inhalt richten soll, der wiederum von der eingestellten Sprache abhängig sein kann.)
Gibt es die Möglichkeit des Databindings?
Oder muss man wie in vielen anderen Bibliotheken auch wirklich alle Werte immer manuell eintragen bzw. auslesen?
Ist eine Auszeichnungssprache geplant, mit der man die Oberfläche definieren kann oder muss man alles im Code aufbauen?
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: Graphische Benutzerschnittstelle

Beitrag von exploid »

Hallo Sacaldur

Zunächst einmal danke für dein Interesse an dem GUI Projekt.

"Wie kann man die Steuerelemente animieren? (Vielen dürfte es nicht reichen einfach nur 3 Grafiken verwenden zu müssen)"
Animationen von GUI Elementen ist geplant. Meine bisherigen Gedanken dazu sind eine statisch definierte Anzahl von Bitmaps für ein Steuerelement in einem hinreichenden Zeitintervall zu rendern um einen Animationseffekt darzustellen (Idee des Daumenkinos :]). Es wäre möglich dieses Intervall zu berechnen um die 60 frames pro Sekunde für eine Animation zu erhalten. Dazu müssen noch Informationen gefunden werden.
"Wie kann man Layouts definieren?
Oder muss man jede Komponente einzeln mit Koordinaten und Größe bestücken?"
Beides wird möglich sein. Geplant ist eine simple Scriptsprache zur Verfügung zu stellen. Scriptbefehl => Z.b. Button 40, 100, 50, 100, "Bitmap_idle.jpg", "Bitmap_mouse_over.jpg", "Bitmap_clicked.jpg". Diese Script-Befehle befinden sich dann in einer Textdatei. Weiter gedacht wäre es dann auch möglich ein Programm zu entwickeln das GUI-Layouts entwerfen kann und dieses Layout dann in diese Textdatei compiliert welche von einem Spiel geladen werden kann welches die GUI Bibliothek verwendet. :)
"Gibt es die Möglichkeit des Databindings?"
Bis jetzt noch nicht. Ich weiss nicht was genau Databinding ist. Falls du so etwas meinst http://de.wikipedia.org/wiki/XML-Datenbindung das ist bisher nicht geplant weil es noch nicht gebraucht wird.
"Ist eine Auszeichnungssprache geplant, mit der man die Oberfläche definieren kann oder muss man alles im Code aufbauen?"
Es ist eine Script- oder Macrosprache geplant, siehe oben.
All your base are belong to us! Justice
Benutzeravatar
dowhilefor
Moderator
Beiträge: 173
Registriert: 27.02.2009, 15:44
Alter Benutzername: 6SidedDice
Echter Name: Nico Probst
Wohnort: Bochum
Kontaktdaten:

Re: Graphische Benutzerschnittstelle

Beitrag von dowhilefor »

Wie wäre es du abstrahierst das aussehen der Elemente etwas mehr? Wieso muss ich mich darum kümmern das ich ein idle, mouse_over und clicked image brauche? Wieso nicht einfach
"Button Style=Simplebutton"

irgendwo anders habe ich dann definiert
"Style SimpleButton { ClickedImage="Bitmap_clicked.jpg" etc... }

Animieren kann übrigens 2 Dinge bedeuten, den inhalt animieren, das liese sich wirklich über das "Daumenkino" realisieren, aber auch das layout animieren. In der Vergangenheit haben wir für spiele ausschliesslich letzteres benutzt und damit schon tolle UIs erzeugt. Reinfliegende Buttons, pulsierendes Mouseover, ein und ausfadenden screens etc. Alles das basiert rein auf property manipulation der elemente, sprich Positionen, Größe, Alpha.

Würde ich heute ein UI Framework für Spiele schreiben würde ich es extrem eng an WPF und Silverlight anlehnen, imho das non plus ultra für interface design. Ich würde übrigens, gerade bei Spielen ganz schnell abstand von festen positionen und größen nehmen. Ähnlich wie WPF, würde ich das gar nicht erst erlauben (Ausser über den Layouter Canvas in WPF) sondern immer nur mit layoutern arbeiten. Du ersparst dir eine Menge arbeit verschiedene Auflösungen zu unterstützen.
Mein Gehirn besteht nur noch aus einem hash-index, ich weiss was ich kenn aber kenn nicht was ich weiss
Benutzeravatar
Sacaldur
Beiträge: 13
Registriert: 09.10.2012, 12:07
Wohnort: Berlin

Re: Graphische Benutzerschnittstelle

Beitrag von Sacaldur »

Auch ich hab beim Schrebien meiner Antwort sehr an WPF gedacht, wovon diverse Features bereits vorgestellt wurden.
Ein weiteres ist das Databinding. Man kann für jedes Attribut sagen, auf welche "Variable" es sich bezieen soll ud schon aktualisiert sich die Oberfläche automatisch bei Änderungen. Darüber kann man außerdem auch dafür sorgen, dass sich der Wert einer Variable durch Änderungen an der Oberfläche ( bspw. durch Texteingaben, automatisch anpasst. Weiterhin ist es möglich, die Daten zwischendurch zu konvertieren, sofern erforderlich.

Du solltest zur Beschreibung der Oberfläche auch nicht versuchen, eine neue Scriptsprache zu erfinden, da Programmlogik nicht erforderlich ist. Du solltest dich auf eine reine Beschreibung beschränken. WPF verwendet dafür XAML, welches (oh Wunder) auf XML aufbaut.

Mir fällt auch gerade ein, dass ich mir mal QML anschauen wollte, womit man wohl auch GUIs definieren kann...
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: Graphische Benutzerschnittstelle

Beitrag von exploid »

@dowhilefor, @Sacaldur danke dafür dass ihr euch für das GUI Projekt interessiert
Frage: "Wie wäre es du abstrahierst das Aussehen der Elemente etwas mehr?"
Antwort: hm, okay :)

Frage: "Wieso muss ich mich darum kümmern das ich ein idle, mouse_over und clicked image brauche? Wieso nicht einfach
Button Style=Simplebutton" irgendwo anders habe ich dann definiert "Style SimpleButton { ClickedImage="Bitmap_clicked.jpg" etc... } "
Antwort: Die Schaltfläche (Steuerelement Button) hat 3 mögliche Zustände. Also Schaltfläche betätigt von einer Maustaste, die Maus zeigt oder befindet sich über der Schaltfläche, oder die Schaltfläche ist unbetätigt. Das muss darstellbar sein und daher werden 3 Bitmaps für die Zustände benötigt. Planung: Für die Animation von Schaltflächen für Bildsequenzen (Daumenkino) gilt das ebenfalls. Planung: Weiterhin wird auch ein akkustischer Effekt bereitgestellt sein. Da werden nur 2 Töne oder Toneffekte benötigt. Für den Zustand Maus über Schaltfläche und Zustand Schaltfläche betätigt.
Mehr zu internen Details: Die GUI wird in der Renderschleife dargestellt und auf Interaktion des Benutzers überprüft. (Bruteforce, mir ist bisher nix besseres eingefallen) Um die Renderschleife nicht alzusehr zu belasten gibts eine Funktion die überprüft ob sich der Mauszeiger innerhalb eines Steuerelements befindet. Falls das zutrifft werden dem Steuerelement Zustandsbits zugewiesen. (mouseover, betätigt, losgelassen, sichtbar) Das werden wahrscheinlich noch mehr. Im Rendervorgang wird dann überprüft welchen Zustand das Steuerelement hat und davon abhängig wird die entsprechende Bitmap ausgewählt und gezeichnet. Wenn ihr Code sehen wollt oder das Projekt könnt ihr das gerne sehen ist nix geheimes dran und wirklich so einfach wie möglich gehalten damit es schnell ist.

@Sacaldur, danke für deine Aussagen
Ich habe Wikipedia für all die unbekannten Akronyme konsultiert und als interessant bewertet. :) Die GUI die entwickelt wird findet ausschließlich innerhalb einer Directx-Umgebung Anwendung. XML und QML ist ja mehr für Internetseiten/Browseranwendungen gedacht.
All your base are belong to us! Justice
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: Graphische Benutzerschnittstelle

Beitrag von exploid »

Huhu :)

Mich würde brennend interessieren ob mein Projekt auf euren Windows Systemen funktioniert. Wer will kann es ja mal testen. *g*
Hier der download link: http://www.filehostfree.com/?d=50A6993A1 Wenn ihr mir helfen wollt sendet bitte die Log files zu mir zurück. :]
All your base are belong to us! Justice
Antworten