ich stehe grade vor der Aufgabe, eine GUI für mein aktuelles Projekt / dessen Engine zu programmieren. Da ich mir den Aufwand nur einmal machen möchte, dachte ich, ich frag mal in die Runde, was ihr so von meinen aktuellen Ideen haltet.
- Positionierung durch einen speziellen Skalarwert (Relative Größe zum Bildschirm + Pixel-Offset)
- Erstellen der Oberfläche via Code oder durch Definition in einer XML-Datei
- Zugriff auf Elemente durch Pfade ( gui.Get<Button>("window/buttonContainer/createButton") )
- Grundlegende API orientiert sich an Windows.Forms (Parenting, Controls, ...)
- Eventbasiertes UI-Feedback
Code: Alles auswählen
private void InitializeComponents()
{
// Load a layout from the asset folder
GUILayout layout = this.assets.Load<GUILayout>("gui/mainMenu");
// Create the GUI
this.gui = new GUI();
this.gui.Load(layout);
// Assign some events
Button startButton = this.gui.Get<Button>("buttonContainer/startButton");
startButton.Click += this.startButton_Click;
Button exitButton = this.gui.Get<Button>("buttonContainer/startButton");
exitButton.Click += this.exitButton_Click;
Button newButton = new Button("Click me!");
newButton.X = new Scalar(0.2f, -40); // 20% * parentWidth - 40 pixel
newButton.Y = new Scalar(0.2f, -15); // 20% * parentHeight - 15 pixel
newButton.Size = new ScalarSize(new Scalar(0.0f, 80), new Scalar(0.0f, 30)); // 80x30 pixel size
// Use ui base class here
Control container = this.gui.Get<Control>("buttonContainer");
container.Controls.Add(newButton); // Add the button
}
Würdet ihr mit so etwas arbeiten können oder gäbe es irgendwelche absoluten No-Gos?
Grüße
Felix
PS.:
Die Engine ist in C# mit OpenTK und OpenGL 3.3 geschrieben.