مرحبا خابروفيتس! أريد أن أخبرك عن نظام واجهة المستخدم الخاص بي ، والذي كتبته لمحرك اللعبة الخاص بي ، والذي أقوم بعمل محرر له. مثله:

لذلك ، للمرة الألف بدأت في كتابة المحرك ، وقررت بحزم أنه هذه المرة سأفعل كل شيء بشكل جيد وصحيح. واحد من هؤلاء "الجيد والصحيح" هو محرر WYSIWYG على غرار Unity3D. بالمناسبة ، قبل ذلك كان لدي بالفعل خبرة في تطوير مثل هؤلاء المحررين على Qt. وبحلول ذلك الوقت ، فهمت بالفعل أن المهمة ليست سهلة إذا كنت أرغب في إنشاء محرر جيد حقًا. وهذا يتطلب نظام واجهة مستخدم جيد جدًا ومرنًا سأكون على دراية جيدة به وأعرف كل أنواع التفاصيل الدقيقة. في الواقع ، في مثل هذا المحرر ، سيكون هناك الكثير من عناصر واجهة المستخدم وعناصر التحكم المخصصة وما إلى ذلك. لذلك ، يجب ألا يكون هناك حل وسط بين جودة المحرر وإمكانيات نظام واجهة المستخدم.
UI. .. 2D , (- , , , ..), UI .
" , ?" - .
, , , - . - . . , .
UI :
UI-
.
UI- : . . - .

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

9-slice . , 9 :

, , , , . , .

- , ? ( ) . , - . - .

, , :







- . , , . .
, - .

:
:
,
FreeType
, .. . - , . - , , , - . - , -. , , .
, , . . :
. , . : , , , . . , . , , . , "...", .
, .
- . , , .
IRectDrawable
, IRectDrawable. , ( 23), , , . IRectDrawable IDrawable ( ) Transform ( 23, Basis).
, Graphic API , , . , UI . , , , . , . , . , , .
. : , . . . , .
, - . -, . . , .
- , .
IDrawable , .
, - . - .
( , touch-screen), , , . . .
. -, , . , . - - . , , .
CursorAreaEventsListener. , . , , . , EventsSystem, CursorAreaEventListenersLayer.
? ? ? . , . , , . - , , , , , .
. , . , , .. . , . , "" , , .
. , , .
, . , , . , . , , . . .. IRectDrawable.

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

Layout' ( , ), , . .

Layout' :
Widget'. , .
, . Layout', , . ", "
. - , ,
, WidgetLayout
Widget'
UI , . , Widget . Widget , KeyboardEventsListener, CursorAreaEventsListener.
:
Checkbox
,
/ progress-bar
/ scroll bar
- , . .
PopupWidget. . . . , . , , : , .

, .
: 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, , "" , .