Qt? ImGUI? wxWidgets? Wir schreiben unsere

Hallo Khabrovites! Ich möchte Ihnen von meinem UI-System erzählen, das ich für meine Game Engine geschrieben habe und auf dem ich einen Editor dafür erstelle. So was:

Zum x-ten Mal begann ich mit dem Schreiben des Motors und entschied fest, dass ich diesmal alles gut und richtig machen würde. Eines dieser "guten und richtigen" ist ein WYSIWYG- Editor a la Unity3D. Übrigens hatte ich vorher bereits Erfahrung in der Entwicklung solcher Editoren auf Qt. Und zu diesem Zeitpunkt habe ich bereits verstanden, dass die Aufgabe nicht einfach ist, wenn ich einen wirklich guten Editor erstellen möchte. Und dies erfordert ein sehr gutes und flexibles UI-System, in dem ich mich sehr gut auskenne und alle möglichen Feinheiten kenne. In einem solchen Editor gibt es tatsächlich viele benutzerdefinierte Widgets, Steuerelemente usw. Daher sollte es keinen Kompromiss zwischen der Qualität des Editors und den Funktionen der Benutzeroberfläche des Systems geben.

UI. .. 2D , (- , , , ..), UI .

" , ?" - .

, , , - . - . . , .

UI :

  • UI-

.

UI- : . . - .

UI - , ..

(): , , , . (draw call), , , . API , - .

- , - . , . : , , .

9-slice . , 9 :

, , , , . , .

- , ? ( ) . , - . - .

, , :

Einfaches Sprite, erstreckt sich nur
,
9-Slice-Sprite, erstreckt sich proportional
9-slice ,
Zeigt den Fortschritt bei der kreisförmigen Füllung an
Vertikale Füllung
Horizontale Füllung
Texturwiederholung
Seitenverhältnis und Passform beibehalten

- . , , . .

.

, - .

:

:

  • ,

  • FreeType

, .. . - , . - , , , - . - , -. , , .

, , . . :

. , . : , , , . . , . , , . , "...", .

, .

- . , , .

.

IRectDrawable

, IRectDrawable. , ( 23), , , . IRectDrawable IDrawable ( ) Transform ( 23, Basis).

, Graphic API , , . , UI . , , , . , . , . , , .

. : , . . . , .

, - . -, . . , .

- , .

IDrawable , .

, - . - .

( , touch-screen), , , . . .

. -, , . , . - - . , , .

CursorAreaEventsListener. , . , , . , EventsSystem, CursorAreaEventListenersLayer.

? ? ? . , . , , . - , , , , , .

. , . , , .. . , . , "" , , .

. , , .

, . , , . , . , , . . .. IRectDrawable.

Alternatives Überlappungs-Rendering

, , "" . , , , . - , . , .

, , , , .

. ( , IRectDrawable), IDrawable::OnDrawn(). .

. - Actor, , , , , , Actor'. . - Actor'.

Actor' . , . , , , , Actor'.

UI . , UI - Actor'. Widget.

Widget

"" . Actor , , , , Widget' .

Widgt' WidgetLayout, ActorTransform. , , Actor'.

. . . . , "" , . Unity GUI.

WidgetLayer

Actor', Widget' WidgetLayer. - Widget, IRectDrawable WidgetLayout' WidgetLayerLayout.

, . , .. .

Widget', Widget'. , , . , , .

- Widget', Widget'.

WidgetState

- . , . , .. .

Widget' - WidgetState'. -. - , . . . , . . , . .

. - Actor', Widget', Layout', WidgetLayer' .. , - . , children/0/transform/anchor.

, . ,

  • -

  • -

  • -

  • -

, , ..

Widget', .

Widget'

, Widget' Widget, . . - Widget, . - .

, , . Widget', Widget', "" Widget'. , Widget' .

Layout-Widget'

Widget', Widget'. , HorizontalLayout . VerticalLayout, . GridLayout, .

Kombination Horizontal / VerticalLayout
Horizontal/VerticalLayout

Layout' ( , ), , . .

Ein Beispiel für ein ansprechendes Layout im Optionseditor

Layout' :

  • Widget'. , .

  • , . Layout', , . ", "

  • . - , ,

  • , WidgetLayout

Widget'

UI , . , Widget . Widget , KeyboardEventsListener, CursorAreaEventsListener.

:

  • Checkbox

  • ,

  • / progress-bar

  • / scroll bar

- , . .

PopupWidget. . . . , . , , : , .

Hierarchisches Kontextmenü

, .

: anti-aliased

. , OpenGL D3D, , "". .

anti-aliasing'. : , , . , , , .

, . , 8 . . ""

, , , . , , . , . , , . , , 60 .

, . ++ .

Unity3D, . Unity3D " ", , , "", . . , Canvas', , Unity3D.

, , . . , Actor', . - Widget. . .

Widget'

, - Widget', . , . , , . - .

. , API , . , . .

, - Widget , , . - , , .

, Widget' CheckClipping, . : , . , Widget'. - -, . .

Widget' . , , . , .

, . , , .

. , . "" . Widget - , , . Widget' , , . , "" , , . , , , .

, , . , .. .

, ? ? , . , .

:

  • Widget' . Widget'

  • Actor'

UI , . .

6 -. . ImGUI, , "" , .

PS: - 2D , . . , .




All Articles