Qt? ImGUI? wxWidgets? Kami menulis kami

Halo, orang Khabrov! Saya ingin memberi tahu Anda tentang sistem UI saya, yang saya tulis untuk mesin gim saya, tempat saya membuat editor untuknya. Seperti ini:

Jadi, untuk kesekian kalinya saya mulai menulis mesin, dan saya dengan tegas memutuskan bahwa kali ini saya akan melakukan semuanya dengan baik dan benar. Salah satunya adalah "baik dan benar" adalah editor WYSIWYG ala Unity3D. Ngomong-ngomong, sebelumnya saya sudah punya pengalaman mengembangkan editor seperti itu di Qt. Dan saat itu saya sudah mengerti bahwa tugas itu tidak mudah jika saya ingin membuat editor yang benar-benar bagus. Dan ini membutuhkan sistem UI yang sangat baik dan fleksibel di mana saya akan sangat berpengalaman dan mengetahui segala macam seluk-beluk. Memang, di editor seperti itu akan ada banyak widget khusus, kontrol, dll. Oleh karena itu, tidak boleh ada kompromi antara kualitas editor dan kemampuan UI sistem.

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

" , ?" - .

, , , - . - . . , .

UI :

  • UI-

.

UI- : . . - .

UI - , ..

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

- , - . , . : , , .

9-slice . , 9 :

, , , , . , .

- , ? ( ) . , - . - .

, , :

Sprite sederhana, hanya membentang
,
9-slice sprite, membentang secara proporsional
9-slice ,
Menunjukkan kemajuan dengan pengisian melingkar
Pengisian vertikal
Pengisian horizontal
Pengulangan tekstur
Pertahankan rasio aspek dan kesesuaian

- . , , . .

.

, - .

:

:

  • ,

  • FreeType

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

, , . . :

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

, .

- . , , .

.

IRectDrawable

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

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

. : , . . . , .

, - . -, . . , .

- , .

IDrawable , .

, - . - .

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

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

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

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

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

. , , .

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

Perenderan tumpang tindih 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, .

Kombinasi Horizontal / VerticalLayout
Horizontal/VerticalLayout

Layout' ( , ), , . .

Contoh tata letak responsif di editor opsi

Layout' :

  • Widget'. , .

  • , . Layout', , . ", "

  • . - , ,

  • , WidgetLayout

Widget'

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

:

  • Checkbox

  • ,

  • / progress-bar

  • / scroll bar

- , . .

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

Menu konteks hierarki

, .

: 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