# Widgets in games



## jule37 (14. Mrz 2010)

hallo leute,

ich zerbreche mir gerade den kopf darüber, wie wohl der sinnvollste weg aussieht, widgets in einem game zu implementieren. ich war grad kurz davor, ein komplettes widgetsystem selbst zu schreiben, als mir auffiel, dass ich grad dabei bin das rad zu erfinden, was ja bekanntlich schon jemand anders getan hat.

gibt es eine vernünftige möglichkeit widgets wie buttons, labels, textboxen etc. in spielen zu verwenden? aufgrund der drastisch veränderten zeichnungslogik müssten sie in dieser hinsicht komplett vom herkömmlichen verfahren entkopelt werden können. bestenfalls wären es abstrakte widgets, die "nur" containment hierarchie und fokusverhalten implementieren. außerdem wäre es außerdem nicht sinnvoll echte callbacks zu verwenden, da ereignisse wie klicken und tastendrücke durch statusabfragen im update part des renderloops ausgelöst werden, anhand von snappshots des keyboard und mausstatus.

ich bin mir grad nicht sicher, ob ich in die richtige richtung denke. finde das thema wird etwas komplex. hat jemand erfahrung damit? wäre super, wenn mir jemand nen anstoß geben könnte. vielen dank


----------



## Kr0e (14. Mrz 2010)

Hi!

In welchen Dimensionen schwirrst du denn rum ??? ----  ---- Mal im ernst, 2D oder 3D ? Bei 2D Kannste ja die normalen Swingsachen nehmen. (Zugegeben, sieht nciht cool aus in einem Spiel) Aber wenn nciht dann musst du sowhl fürn 2D als auch 3D
entweder ne fertige Lib suchen oder wirklich selbst Hand anlegen. Im Prinzip erfindest du das Rad nicht 2x. Es gibt wenige gute GUI-Libs für Java (Jetzt mal die Sunsachen weggedacht... SWT/Swing). Hatte mich auch vor einer Zeit mal dran versucht und iwann aus Zeitgründen auf bestehende zurückgegriffen (Viele sind in laaaanngsamer Entwicklung noch)

Da gäbe es das FengGUI (Ist aber für OpenGL, aber meiner Meinung nach, sollte man für jedes Spiel OpenGL verwenden^^ Auch 2D).

Oder wenn du ein Game framework haben willst, dann schau mal nach jMonkeyEngine. Die bietet auch ein eigenes Inputsystem mit einer Messagequeue usw. die nur im Renderthread bearbeitet wird... Wichtig für OpenGL!

Wenn du ncoh weitere Fragen hast... Immerher damit 

Gruß,
Chris


----------



## Steev (14. Mrz 2010)

Jede Komponente in Java hat eine Zeichenmethode, in der die Komponente gezeichnet wird. Wird diese überschrieben ohne irgendwelche super-Aufrufe der Zeichnungslogik der Basisklasse, so kannst du deine eigene Zeichnungslogik implementieren, musst aber das Rad nicht neu erfinden. Obwohl das manchmal auch sehr lehrreich sein kann...


----------



## Kr0e (14. Mrz 2010)

So einfach ist das leider nicht. Ich habe mich damit schon eine ganze Weile beschäftigt. Aus meiner Erfahrung kann man Fenster oder Components die auf dem Monitor nicht real existieren (Also nicht dargestellt werden), auch nicht mit Events füttern. Bzw. diese werden dann nicht verarbeitet. Ich hatte vor einiger Zeit versucht Swing auf OpenGL-Basis zu rendern. Sobald die super methoden nicht mehr aufgeruft werden, funktioniert das, weshalb er überhaupt diese Klassen nutzen sollte, (Nämlich Fokus, Input .. usw.) nicht mehr richtig. Und schon recht wird man das niemals hinbekommen, ohne eine Komponente vorher mit einem JFrame/JWindow/Frame/usw. zu verbinden. Nimmt man nur eine JTextArea z.B. und ruft Methoden auf wie "fireOnMouse" oder so ähnlich, dann wird das leider nichts bringen  Zumindest wäre mir da kein Weg bekannt.


----------



## Steev (14. Mrz 2010)

Bei mir hatte das aber funktioniert ;-)

Man muss halt durchgängig Swing benutzen. Die Komponenten habe ich alle auf ein Panel gepackt und daher waren sie ja tatsächlich da. Sie sahen halt nur nicht so aus, wie "normale" Swing-Komponenten. Aber du hast Recht, sobald die Komponenten nicht "real" irgendwo existieren, werden die Events auch nicht mehr korrekt weiter geleitet.


----------



## jule37 (14. Mrz 2010)

hallo,

danke für eure antworten.

swing komponenten scheiden leider völlig aus, weil 1. mein framework alle systemrelevanten parts wegkapselt (inkl. die grafikbibliothek), 2. ich die awt message qeue nicht in diesem kontext verwenden kann / will und 3. weil die widgets bestandteil des scenengraphen sein sollen. außerdem wären diese viel zu überladen mit der ganzen containmenthierarchie, die ja mein scenegraph regelt und irgendwelchen borders, die ich nicht haben will usw. ich brauche wirklich was abstraktes, was unabhängig vom system ist (also nicht nur vom OS sondern auch vom fenster).

ich werd mir mal die libraries, die du da genannt hast ansehen Kr0e, danke


----------



## Steev (14. Mrz 2010)

Ich habe auch ein komplettes Widget-System geschrieben. Das kannst du dir unter folgendem Link bzw. in unserm JCup-Projekt (weiter untem im Forum) ansehen.

http://steev.st.ohost.de/2010-03-13/EGE_GUI_TestV1.jar

Wenn du daran interesse hast, kannst du dich ja nochmal melden. Ich verwende kein Swing und alles wird über meine Engine gezeichnet und gehandelt.

Gruß
Steev


----------



## jule37 (15. Mrz 2010)

danke für das angebot steev, aber ich habe mich nun doch dazu entschieden mir schnell was leichtgewichtiges selbst zu schreiben.


----------

