Kleine Starthilfe für eigene GUI gesucht
Übersicht

nathan7Betreff: Kleine Starthilfe für eigene GUI gesucht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich würde gern für ein Spiel eine eigene Gui Lib basteln.
Ich möchte dies aber wiederverwenden können. Kann mir jemand vielleicht ein kleines Codeschnippselchen zukommen lassen? So in der Art Funktionen GUI Fenster erstellen, Gadgets hinzufügen, Button würde schon reichen. Und das sollte eben verwaltet und auch irgendwie gehandlet werden können, also dass ich wenn Button gedrückt wird auch etwas ausgegeben werden kann. Ein Textfeld wäre noch schön. Ich bin nicht so firm mit sowas, also entschuldigt die Frage. Wenn es unerwünscht ist so etwas zu fragen, dann bitte ich um Entschuldigung. Ich möchte das System später ausbauen, also ich benötige wirklich nur die Grundstrukturen. P.S. Ich möchte keine existierende verwenden da ich bei all dem auch etwas lernen möchte. |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du nicht weißt, wie du das strukturieren sollst, lies dir erstmal ein paar Tutorials durch (die sind ganz wunderbar dazu geeignet, soetwas zu verstehen). Insbesondere solltest du hellhörig werden, wenn es um Types geht.
Einige Tutorials, die sich um Dinge bewegen, die du ungedingt brauchst: https://www.blitzforum.de/foru...hp?t=38124 (Types) https://www.blitzforum.de/foru...hp?t=33510 (Debuggen) https://www.blitzforum.de/foru...hp?t=33468 (Funktionen) Dann kannst du für jedes GUI-Element einen eigenen Type erstellen und Funktionen, um das zu verwalten. Und die Fehler, die du wahrscheinlich machen wirst, kannst du auch ganz einfach finden. ZEVS |
||
nathan7 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke dir erstmal.
Also ich weiß was Types und Funtkionen sind. Ich könnte auch Problemlos so eine Funktion welche GUI Fenster erstellt schreiben. Mein Problem ist die Verwaltung der untergeordneten Gadgets und deren Eigenschaften bzw. Rückgabewerte. Also alles was Texboxen, Buttons, Sliders etc. betrifft. |
||
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du hast pro Element eine Bank, globale Variable oder eine Variable eine entsprechenden Types.
Jeden Frame wird jedes Element durgegangen: Ist der Butten gedrückt worden? Ist die Textbox aufgewählt worden? Ist etwas eingegeben worden? Wurden ein Haken im Kästchen gemacht? Das wird dann entsprechen abgespeichert. DANACH kommt dann der Rest des Programms. Beispiel: Ein Startbutton. Nach dem alle Elemente durchgegangen worden sind ist für den Startbutton gespeichert ob er gedrückt wurde oder nicht. Dann kuckst du einfach in der Bank/Variable nach was der Wert ist und lässt das Programm entsprechend reagieren. Egal was der Button aktiviert, beim test ob er gedrückt wird ist jeder Button gleich. Das alles fast du entweder in Arrays, Verketteten Listen oder beidem zusammen. |
||
![]() |
empet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habs so gelöst (aber in BMX):
Alle Elemente sind "Areas". Diese haben listen mit Child-Areas. So ist zum Beispiel der Bildschirm das oberste Objekt, hat in seiner Liste alle Fenster. Diese widerum beinhalten die Schliessfläche und auch noch den Grafischen inhalt. Der Grafische inhalt hat dann Child-Buttons oder Child-Slider oder Child-TextAreas. Wichtig ist dabei die Relative Position der Objekte. Hast du ein Fenster und das beinhaltet einen Button, so musst du die Position des Fensters und des Buttons zusammenzählen. So ist es möglich das Fenster zu verschieben, der Button bleibt aber immer noch am gleichen ort im Fenster. Wenn du fragen hast einfach noch spezifischer fragen ![]() Beispiel Bild aus einem Editor von mir: ![]() |
||
nathan7 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dann frag ich mal spezifischer.
Zitat: Alle Elemente sind "Areas". Diese haben listen mit Child-Areas. So ist zum Beispiel der Bildschirm das oberste Objekt, hat in seiner Liste alle Fenster. Diese widerum beinhalten die Schliessfläche und auch noch den Grafischen inhalt. Der Grafische inhalt hat dann Child-Buttons oder Child-Slider oder Child-TextAreas.
Wichtig ist dabei die Relative Position der Objekte. Hast du ein Fenster und das beinhaltet einen Button, so musst du die Position des Fensters und des Buttons zusammenzählen. So ist es möglich das Fenster zu verschieben, der Button bleibt aber immer noch am gleichen ort im Fenster. wie müsste das aussehen, also codetechnisch. Ich hatte mir zuerst einmal einen type für die Fenster angelegt, mit Fields für position, größe, hintergrund etc. Dann eine Funktion welche bei Bedarf ein solches Fenster erstellt oder auch mehrere. Dann eine Funktion wo alle Fenster mittels for each durchlaufen werden um alles zu zeichnen. Nun stehe ich vor dem Problem wie ich die "childs" anlege. Ich denke mir das so, dass das ähnlich wie bei den Fenstern ist, nur position eben abhängig des parent objektes. Nur wie ich das codetechnisch umsetze da scheitere ich noch dran. Und dann bleibt noch die Frage des events.Also wenn ich ein Button child hätte und dieser button gedrückt wird, dann ändert sich der eintrag eines fields von klick=false auf klick=true. aber wie frage ich dann zudem noch die jeweilgen buttons ab, also dass jedem button bei einer interaktion dann auch der dementsprechende wert in einer bestimmten variable o.ä. gespeichert wird, sodass man damit arbeiten kann. daher meine frage zu beginn....ein beispiel mit einer funktion für fenster und eine für buttons, damit ich die codetechnische vorgehensweise verstehe. ich möchte später dieses noch um slider etc. erweitern, aber ich muss erst die grundlagen verstehen und ich muss sagen ich lese lieber nen kurzen code und erarbeite mir die funktionsweise. falls das möglich ist. |
||
![]() |
empet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, jetzt wird es schwierig, ich habe keine Ahnung mehr wie man mit listen und Types in B3D umgeht.
Gibt es so etwas wie ein "Extend" in BlitzMax? Also ich kann mir so ein Projekt ohne ein gewisses Mass an OOP nicht vorstellen. Meine Hierarchie ist etwa so: Screen - Windows ------ Button [X] ------ Zeichnungsfläche (Diverse, je nach inhalt wider ein anderer Type) ----------- Buttons, Slider,... ----------- Kleinere Zeichnungsflächen Jedes Objekt hat je eine "Method" fürs zeichnen und berechnen. In dieser "Method" werden dann alle direkten "Childs" aus der Liste aufgerufen, dasselbe zu machen. Diese können dann wieder ihre "Child"s aufrufen. Wichtig ist, das du dir überlegst, wie du Mouse-Events und allgemeine Benutzereingaben verwaltest. Gibt es aktive Objekte? Gibt es verdeckte Flächen, die man nicht aktivieren soll? Welches Objekt hat Vortritt auf eine Tasteneingabe, ... Wenn ich mich nicht falsch erinnere hat B3D keine "Method"s, musst also alles in Funktionen Packen und denen dann das Entsprechnende Objekt mitgeben. Es stellt sich die Frage für was das dieses Projekt ist. Lernzweck? Spiel? Editor? Wie viel Erfahrung hast du schon? Du brauchst sehr viel Geduld (Stunden) und Debugg-Fähigkeiten. Je nachdem kannst du auch eine andere Architektur benutzen. Oder du setzt auf OOP und steigst zu BlitzMax um. Geniere dich nicht, weiter zu fragen! LG Emanuel |
||
nathan7 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also es soll für spiele sein, aber auch ein leveleditor für solches sollte drin sein.
in bb3d gibt es types und keine listen, jedoch hab ich irgendwo in den analen meiner hdd ein snipped rumliegen wie man listen mittels types simulieren kann. ich kenn mich mit bmax ein wenig aus, also würde ich auch solchen code verstehen. ich möchte ja keinen code 1zu1 übernehmen, nur aus dem gezeigten die funktionsweise verstehen. methods gibt es keine also müsste man das alles mittels funktionen machen. ich hab mir ja auch schon einige gui codes angesehen, aber da steht soviel drin und man wird förmlich erschlagen. deshalb meine frage nach etwas simplen wo ich drauf aufbauen kann.damit verstehe ich dann auch die restliche vorgehensweise. und ja ich weiß dass ich mich damit lange beschäftigen muss. und das werde ich auch tun. |
||
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: ich hab mir ja auch schon einige gui codes angesehen, aber da steht soviel drin und man wird förmlich erschlagen dann lösch einfach gewisse Sachen raus oder stell ein ; vor die zeile und sehe was passiert! So schwer kann es ja nicht sein eine GUI zu machen, wenn man die Reihenfolge einhält und Tipps hast du ja auch schon bekommen! Am besten lernt man schon wenn man das irgendwie selbst versucht entweder über Types oder mit DIM-Felder. Ich habe zwar noch keine GUI in der Art gemacht aber sobald man bei Spielen gewisse Fenster, Buttons o.ä. macht, ist es auch eine GUI. Für das verschieben der einzelnen Fenster reicht ein OffsetX/OffsetY was zu den tatsächlichen X/Y Koordinaten dann bei jedem Element addiert/subtrahiert wird. Ob dann ein Fenster inaktiv ist wird mit einer separaten Variable gesteuert, somit müßtest du für jedes Elemt was sich in diesem Fenster befindet eine temp.Variable mitführen um die Werte zwischenzuspeichern und dann bei aktiv setzen des Fensters wieder retourschreiben! So könnte es klappen, in BB3D glaub ich kann man keine Gruppen bilden mit Elementen, mit SpriteCandy schon und in BMax hab ich noch nix gemacht! Aber ich denke wie empet es vorschlägt ist es gut! lg. Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
empet hat Folgendes geschrieben: Gibt es so etwas wie ein "Extend" in BlitzMax? Also ich kann mir so ein Projekt ohne ein gewisses Mass an OOP nicht vorstellen. Nein gibt es nicht und zwar weil BlitzBasic keine Objekt Orientierte Programmierung unterstützt. Man nicht einfach Listen von Objekten anlegen und es gibt weder Methoden noch Vererbungen. Darum halte ich ein BlitzMax Beispiel in diese Richtung auch nicht wirklich hilfreich für den Fragesteller.
Wenn man ein reines GUI Anwendungsprogramm machen will, benutzt man gleich BlitzPlus. Wenn man für Spiele eine Ingame-Oberfläche machen will, kann man natürlich Types und Funktionen zusammenschmieden, aber das ist weder einfach noch hübsch an zu sehen. Das hält natürlich niemand wirklich auf; der User EPS hat ein, zwei GUIs geschrieben: mgui. Die (oder eine anderweitige Bibliothek) würde ich wenn möglich gleich benutzen ohne selbst was herum zu frickeln - eine komplette GUI ist ein riesen Projekt. Wenn du selbst was kleines Implementieren willst, kann man mit BB noch alles ganz nett in Funktionen kapseln. Darüber Hinaus bietet BB einfach nicht die Mittel, um es richtig zu machen. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
AnniXa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab damals mein gui für blitz3d mit dem draw3d teil von Hectics hier ausm forum geschrieben.
das ermöglicht es sehr einfach und cool 2d dinge zu zeichnen, und ist vorallem sehr performant dabei. das sollte man sich aufjedenfall ansehen wenn man mit blitz3d ein gui machen möchte (finde ich zumindest). |
||
|moonForge|
Ich bin Pokémon Meisterin seit 1998! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group