Eigene GUI?
Übersicht

real76Betreff: Eigene GUI? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
ich programmier gerade an einem Kartenspiel für unsere nächste LAN (falls wir irgendwann eine Pause bei CoD4 brauchen) und bin auf eine Schwierigkeit gestossen. Anfangs habe ich alle Textfelder, Knöpfe etc. direkt mittels DrawRect(), DrawText()... auf den Bildschirm gemalt. Wenn allerdings noch das Menü, ein Optionsfenster etc. dazukommt wird das etwas viel und mein Quellcode ist nur noch unübersichtlich. Jetzt wollte ich eine Art GUI schreiben (weil ich bei Nutzung fremder GUIs wie HighGUI oder CoreGUI keinen Lerneffekt hab). Aber wie verwalte ich sowas effektiv? Ich brauche für mein Spiel eigentlich nur Fenster (für Splashscreen, Menü und Optionen) mit Textfeldern, Eingabefeldern und Buttons. Wie verwalte ich sowas am besten? Per Types für die Fenster und jeden GadgetTyp? @c64: War CoreGUI nicht mal Open Source? Kurzer Nachtrag: Ich bin eigentlich ein PureBasic-Fan, aber BlitzMax gefällt mir immer mehr! Bei 2D-Programmierung macht mir BM langsam richtig Spaß. Gruß René |
||
c64 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi real76,
Ja CoreGUI war mal openSource, die Gadgets sind es auch noch aber du benötigst ja erstmal einen Core. Also ich benutze für solche sachen grundsätzlich Types, ... da CoreGUI (TGUI) in meiner ersten Zeit mit BlitzMax enstandt habe ich den Kern auch nich vom GrundGadget getrennt, ich wollte mir auch schon eine neue GUI schreiben aber Coregui (TGUI) war eigtl. vom Source jetzt ma abgesehen schon viel zu weit und für die meisten meiner Sachen auch mehr als ausreichend zudem lassen sich fehlende Gadgets recht simple programmieren so das ich die idee wieder verwarf ... . so noch ma zu den Types und n paar tips bzw. ein Tip. für die generelle strukturierung. Dein Kern der Objecte verwaltet, und allgemeine abfgragen übernimmt wie Mouseover checks etc. Code: [AUSKLAPPEN] Type TMyGUICore endtype Dein "Grundgadget" diesem gibst du alles was ein Gadget Unbedingt benötigt bzw. 100% brauch, position, grösse, farbe, alpha, status etc. Code: [AUSKLAPPEN] Type TMyGUIGadget endtype Wenn du dann weitere gadgets bastelst machste einfach dein neuen "object/gadget" type und erweiterst diesen über das "StandardGadget" Code: [AUSKLAPPEN] Type TMyGUIGadget_Button extends TmyGUIGadget endtype Hab leider nich allzuviel Zeit aber ich hoffe das dir dass zumindest schonmal bei 1. grober planung helfen könnte. mfg. C64 |
||
Betreten verboten! Kinder haften für ihre Eltern! |
real76 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke trotzdem erstmal. Ich werd mal testen, wie ich das am besten umsetzen kann und den (hoffentlich) funktionierenden Code evtl. hier posten. | ||
real76 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab nochmal eine Frage dazu weil ich daran jetzt weiterarbeiten will/muss.
Ich möchte auf einem Hintergrund (=Grafik) Fenster erstellen, die auch transparent sein sollen. Ich hatte mir überlegt, beim Erstellen des Fensters eine Textur zu erstellen und dort die Gadgets draufzulegen, um für das Fenster eine Transparenz zu ermöglichen. Wenn ich z.B. das Fenster zur Laufzeit einfach als Rechteck (oder welcher Form auch immer) zeichne und direkt auf den Hintergund zeichnen lasse, klappt die Transparenz zwar für's Fenster, aber nicht für die Gadgets... Welche Möglichkeiten seht ihr, Transparenz eines Fensters inkl. der Gadgets zu ermöglichen? |
||
c64 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
HI,
wenn du davon ausgehst das Fenster auch gagdets sind dann würde ich für jedes gadget einen alphawert ermöglichen. Ist dieser < 1.0 dann wird in der Renderroutine Alphablend aufgerufen, oder man nimmt Flags dafür zb. Gadget.Blend = GADGET_AUTOBLEND , oder Gadget.Blend = GADGET_ALPHABLEND. mfg. C64 |
||
Betreten verboten! Kinder haften für ihre Eltern! |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn deine GUI performant genug sein soll, um ingame nicht weiter aufzufallen, du aber trotzdem nen netten Ingame-Style haben willst (Sprich: Ein - beispielsweise Fenster - wird aus ~9 getileten, gestretchten, etc. Grafiken zusammengesetzt, im Extremfall), solltest du dir überlegen, auf eine Prerendering-Technik zurückzugreifen, ein GUI-Objekt also auf eine Textur zu rendern und diese anstelle des GUIObjekts zu zeichnen - und sie natürlich nur dann neu zurendern, wenn eine Veränderung an der Grafik auftritt.
Ich probiere da Konzept gerade aus und es funktioniert sehr gut. Beim Direktvergleich macht das je nach GUI-Objektanzahl teilweise rund 2 - 8 ms aus; mit Prerendering läufts dann flott mit weniger als oder einer ms pro Frame während es ohne Prerendering je nach Situation 3 - 9 verbraucht. Wenn du bedenkst, ass du bei 60 FPS maximal 16 ms pro Frame in Anspruch nehmen darfst und deine GUI mitunter schonmal die Hälfte davon schluckt,... nunja. Ist natürlich eine andere Sache, wenn Menüs & Co während des Spiels gar nicht aufrufbar sind bzw. du alles zentral in einem Hauptmenü vor Spielbeginn anordnest. Dann kannst du die 16 ms pro frame ruhig verbraten, sonst muss ja schließlich nichts berechnet werden. Höchsten für ältere Systeme lohnt es sich da, eine Prerendering-Technik zu verwenden. Wobei sie auch wieder nicht ZU alt sein dürften, weil Render2Texture dabei nötig - oder zumindest sehr SEHR wünschenswert - ist. |
||
real76 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sowas hatte ich mir vorgestellt... Beim Erstellen eines Fensters wird automatisch eine Textur erstellt, auf die die Gadgets vorgerendert werden und ich das Fenster bzw. die Textur dann nur noch auf dem Bildschirm darstellen muss.
Aber das geht eher schleppend voran, da ich mit der GUI auch meinen Einstieg in BM übe. ![]() |
||
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ne GUI als Einstiegsprojekt? Ich weiß nicht, ob das eine so gute Idee ist. Ich persönlich hab beim ersten Versuch in Sachen Features und Nutzbarkeit kläglich versagt und zu diesem Zeitpunkt hatte ich bereits den Einstieg in BMax gefunden. Vielleicht ergeht es dir da besser, aber für eine GUI braucht man - würde ich mal vermuten - idR zwei Anläufe sofern man nicht gerade riesig viel Programmiererfahrung mitbringt. | ||
real76 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja, ich programmiere eigentlich ein Spiel (Idee unserer LAN-Party) als Einstieg. Dabei bin ich aber über das GUI-Handling gefallen, dass ich jetzt über ein GUI-System aufzufangen versuche. Das soll ganz minimalistisch sein und nicht den Umfang einer iGlass-GUI oder CoreGUI besitzen. Irgendwo muss ich nur anfangen... Nur im Spiel wäre es schon nett anzusehen, wenn es Überblendeffekte usw. zwischen den Fenstern gibt. Deshalb dieser Thread. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group