Qt? ImGUI? wxWidgets? Nous écrivons notre

Bonjour, Khabrovites! Je veux vous parler de mon système d'interface utilisateur, que j'ai écrit pour mon moteur de jeu, sur lequel j'en fais un éditeur. Comme ça:

Donc, pour la énième fois, j'ai commencé à écrire le moteur, et j'ai fermement décidé que cette fois je ferais tout bien et correctement. Un de ces "bons et bons" est un éditeur WYSIWYG à la Unity3D. D'ailleurs, avant cela, j'avais déjà de l'expérience dans le développement de tels éditeurs sur Qt. Et à ce moment-là, j'ai déjà compris que la tâche n'est pas facile si je veux faire un très bon éditeur. Et cela nécessite un système d'interface utilisateur très bon et flexible dans lequel je serai très bien versé et connaîtrai toutes sortes de subtilités. En effet, dans un tel éditeur, il y aura beaucoup de widgets personnalisés, de contrôles, etc. Par conséquent, il ne devrait y avoir aucun compromis entre la qualité de l'éditeur et les capacités de l'interface utilisateur du système.

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

" , ?" - .

, , , - . - . . , .

UI :

  • UI-

.

UI- : . . - .

UI - , ..

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

- , - . , . : , , .

9-slice . , 9 :

, , , , . , .

- , ? ( ) . , - . - .

, , :

Sprite simple, s'étire juste
,
Sprite à 9 tranches, s'étire proportionnellement
9-slice ,
Montre la progression avec remplissage circulaire
Remplissage vertical
Remplissage horizontal
Répétition de texture
Préserver les proportions et l'ajustement

- . , , . .

.

, - .

:

:

  • ,

  • FreeType

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

, , . . :

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

, .

- . , , .

.

IRectDrawable

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

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

. : , . . . , .

, - . -, . . , .

- , .

IDrawable , .

, - . - .

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

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

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

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

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

. , , .

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

Rendu de chevauchement alternatif

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

, , , , .

. ( , 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, .

Combinaison horizontale / verticale
Horizontal/VerticalLayout

Layout' ( , ), , . .

Un exemple de mise en page responsive dans l'éditeur d'options

Layout' :

  • Widget'. , .

  • , . Layout', , . ", "

  • . - , ,

  • , WidgetLayout

Widget'

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

:

  • Checkbox

  • ,

  • / progress-bar

  • / scroll bar

- , . .

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

Menu contextuel hiérarchique

, .

: 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