Kleine Starthilfe für eigene GUI gesucht

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

nathan7

Betreff: Kleine Starthilfe für eigene GUI gesucht

BeitragFr, Okt 18, 2013 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Okt 18, 2013 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Okt 19, 2013 9:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Okt 19, 2013 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Okt 19, 2013 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

Beispiel Bild aus einem Editor von mir:
user posted image
 

nathan7

BeitragSo, Okt 20, 2013 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Okt 20, 2013 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Okt 20, 2013 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Okt 20, 2013 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Xeres

Moderator

BeitragMo, Okt 21, 2013 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

AnniXa

BeitragMo, Okt 21, 2013 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group