Admin (обсуждение | вклад) м (Admin moved page CoreEngine/Введение в GUI to InnerCore/Введение в GUI) |
|||
(не показана 21 промежуточная версия 4 участников) | |||
Строка 1: | Строка 1: | ||
− | Для создания GUI (графический интерфейс пользователя) в Core | + | Для создания GUI (графический интерфейс пользователя) в Inner Core предусмотрены огромные возможности, которые позволяют не только создавать сложный интерфейс в стиле MCPE (и не только), но и эффективно интегрировать его с остальными игровыми элементами, которые добавляются модами с помощью контейнеров. |
=== Единицы измерения === | === Единицы измерения === | ||
Все размеры и координаты в интерфейсе задаются в юнитах, где 1 юнит это 1/1000 от ширины окна, в котором создается интерфейс. Если юниты используются для задания позиции и размера окна, то 1 юнит составляет 1/1000 от ширины экрана (как и в случае, когда окно открыто на весь экран). | Все размеры и координаты в интерфейсе задаются в юнитах, где 1 юнит это 1/1000 от ширины окна, в котором создается интерфейс. Если юниты используются для задания позиции и размера окна, то 1 юнит составляет 1/1000 от ширины экрана (как и в случае, когда окно открыто на весь экран). | ||
+ | === Параметры Элементов === | ||
+ | <syntaxhighlight lang="Javascript"> | ||
+ | //Частые параметры | ||
+ | type: "тип_элемента" - задает тип элемента. | ||
+ | x: число - положение элемента по горизонтали. | ||
+ | y: число - положение элемента по вертикали. | ||
+ | scale: число - сколько юнитов приходится на 1 пиксель текстуры, если этот параметр не указан, он будет равен 1. | ||
+ | bitmap: "текстура" - задает текстуру элементу. | ||
+ | //Для других элементов(частный случай) | ||
+ | text: "текст"- задает текст элементу. | ||
+ | color: цвет - задает цвет, | ||
+ | font: шрифт_текста- задает параметры шрифта, имеет следующий вид: | ||
+ | {color: цвет, shadow: тень(число от 0 до 1), size: размер(в юнитах)} | ||
+ | bg: "текстура" - задает текстуру фона | ||
+ | bitmap2: "текстура" - аналогично. | ||
+ | width: число - ширина элемента. | ||
+ | height: число - высота элемента. | ||
+ | |||
+ | </syntaxhighlight> | ||
=== Текстуры и цвет === | === Текстуры и цвет === | ||
− | Текстуры интерфейса, которые находятся в папке gui вашего мода, будут загруженны и доступны под именем файла без расширения: "gui/slot.png" будет загружен как "slot". | + | Текстуры интерфейса, которые находятся в папке gui вашего мода, будут загруженны и доступны под именем файла без расширения: "gui/slot.png" будет загружен как "slot". Если в папке gui у вас есть папка и в ней картинка к который вы хотите обратиться то вместо / надо использовать точку, например: папка gui/gui1/image.png - обращение gui1.image |
− | + | Также возможно использование объекта [https://developer.android.com/reference/android/graphics/Bitmap Bitmap ]вместо имени файла, если возникает такая необходимость. | |
− | |||
− | + | Цвет задается с помощью метода класса android.api.android.graphics.Color.rgb(r, g, b) - где r, g и b - красная, зеленая и синяя составляющие цвета от 0 до 255 каждая. | |
Текстурой рамки является текстура размера 16x16, изображающая нужную рамку самого маленького размера, которая будет потом растянута до любых размеров. | Текстурой рамки является текстура размера 16x16, изображающая нужную рамку самого маленького размера, которая будет потом растянута до любых размеров. | ||
+ | </div> | ||
=== Объект описания === | === Объект описания === | ||
− | Любой интерфейс имеет объект описания, позволяющий задать данный интерфейс и динамично изменять его, меняя этот объект, пока интерфейс открыт. Объект описания любого типа имеет значения drawing (массив) и elements (объект), которые задают отрисовку фона и элементы соответственно. Их изменение из любого места ведет к динамичному изменению интерфейса, если он открыт. Т.е если вы изменените параметры какого-то элемента или команды отрисовки, то интерфейс изменится в соответствии с вашими изменениями. | + | Любой интерфейс имеет объект описания, позволяющий задать данный интерфейс и динамично изменять его, меняя этот объект, пока интерфейс открыт. Объект описания любого типа имеет значения drawing (массив) и elements (объект), которые задают отрисовку фона и элементы соответственно. Их изменение из любого места ведет к динамичному изменению интерфейса, если он открыт. Т.е если вы изменените параметры какого-то элемента или команды отрисовки, то интерфейс изменится в соответствии с вашими изменениями. |
− | |||
− | |||
− | + | === Отрисовка элементов на фоне === | |
+ | Элементы отрисовки задаются в объекте описания в массиве drawing и отвечают за отрисовку фона интерфейса. | ||
+ | Стоит учесть что каждый элемент будет накладываться послойно(т.е 2й элемент будет сверху 1го и тд). | ||
==== Формат: ==== | ==== Формат: ==== | ||
− | < | + | <syntaxhighlight lang="Javascript">drawing: [ |
− | {/* | + | {/* параметры элемента 1 */}, |
− | {/* | + | {/* параметры элемента 2 */}, |
− | {/* | + | {/* параметры элемента 3 */}, |
− | .... | + | //.... |
− | ] | + | ]</syntaxhighlight> |
− | </ | ||
− | ==== | + | ==== Элементы отрисовки: ==== |
− | + | <syntaxhighlight lang="Javascript"> | |
− | *{type: "background", color: цвет} | + | /*Background*/ {type: "background", color: цвет} |
− | *{type: "bitmap", bitmap: "текстура", x: число, y: число, scale: число} | + | /*Bitmap*/ {type: "bitmap", bitmap: "текстура", x: число, y: число, scale: число} |
− | *{type: "frame", x: число, y: число, width: число, height: число, bitmap: " | + | /*Frame*/ {type: "frame", x: число, y: число, width: число, height: число, bitmap: "текстура_рамки", color: цвет, sides: bool, scale: число} |
− | *{type: "text", text: "текст", x: число, y: число, font: | + | /*Text*/ {type: "text", text: "текст", x: число, y: число, font: шрифт_текста} |
− | *{type: "line, x1: число, y1: число, x2: число, y2: число, width: число, color: цвет} | + | /*Line*/ {type: "line", x1: число, y1: число, x2: число, y2: число, width: число, color: цвет} |
+ | </syntaxhighlight> | ||
+ | '''''Background''''' Заполняет весь фон указанным цветом.<br> | ||
+ | '''''Bitmap''''' Отрисовывает данную текстуру на данных координатах.<br> | ||
+ | '''''Frame''''' Отрисовывает рамку данного размера на данных координатах.<br> | ||
+ | '''''Text''''' Отрисовывает данный текст на данных координатах с данным шрифтом.<br> | ||
+ | '''''Line''''' Отрисовывает линию от x1 и y1 до x2 и y2. width - толщина линии в юнитах, по-умолчанию 1, color - цвет линии, по-умолчанию черный.<br> | ||
=== Элементы === | === Элементы === | ||
− | Элементы задаются в объекте описания в объекте elements, каждый элемент должен иметь уникальное имя. По этим именам с ними можно будет взаимодействовать | + | Элементы задаются в объекте описания в объекте elements, каждый элемент должен иметь уникальное имя. По этим именам с ними можно будет взаимодействовать позже. |
==== Формат: ==== | ==== Формат: ==== | ||
− | < | + | <syntaxhighlight lang="Javascript">elements: { |
"name1": {/* элемент 1 */}, | "name1": {/* элемент 1 */}, | ||
"name2": {/* элемент 2 */}, | "name2": {/* элемент 2 */}, | ||
"name3": {/* элемент 3 */}, | "name3": {/* элемент 3 */}, | ||
− | .... | + | //.... |
− | }</ | + | }</syntaxhighlight> |
− | |||
==== Объект функций клика ==== | ==== Объект функций клика ==== | ||
− | <div>Такой объект используется в некоторых элементах, например в кнопках, чтобы определить действие при нажатии. | + | <div>Такой объект используется в некоторых элементах, например в кнопках, чтобы определить действие при нажатии.</div> |
Формат объекта: | Формат объекта: | ||
− | < | + | <syntaxhighlight lang="Javascript">{ |
− | onClick: function(position, container, tileEntity, window, canvas, scale){ // если | + | onClick: function(position, container, tileEntity, window, canvas, scale){ |
− | + | // если задан, задает функцию короткого нажатия | |
− | |||
− | |||
}, | }, | ||
− | + | onLongClick: function(position, container, tileEntity, window, canvas, scale){ | |
− | onLongClick: function(position, container, tileEntity, window, canvas, scale){ // если | + | // если задан, задает функцию долгого нажатия |
− | |||
− | |||
− | |||
} | } | ||
− | } | + | //возвращаемые параметры |
− | </ | + | //position - возвращает позицию касания |
+ | // container - контейнер, для которого открыт данный интерфейс | ||
+ | // tileEntity - если интерфейс открыт для какого то tile entity, то передаст его, иначе null | ||
+ | //window - возвращает окно с которого было воспроизведено нажатие | ||
+ | //canvas - возвращает канвас ?? | ||
+ | //scale размер элемента ?? | ||
+ | }</syntaxhighlight> | ||
+ | <h4>Стандартные элементы:</h4> | ||
− | ==== | + | <ul> |
+ | <li><syntaxhighlight lang="Javascript">{type: "slot", x: число, y: число, size: число, isValid: function, visual: bool, bitmap: "текстура", clicker: объект функций клика, needClean: bool, isTransparentBackground: bool}</syntaxhighlight>- создает слот размера size, если параметр visual задан и равен true, то слот не может быть выделен и из него ничего нельзя забрать, если clicker задан, то стандартные функции клика будут заменены на определенные в нем, если isTransparentBackground или needClean равняется true, то включается прозрачность текстуры слота. isValid - проверка соответствия фильтру который вы создаете, содержит id, count, data. функция isValid: function(id, count, data){}</li> | ||
+ | <li><syntaxhighlight lang="Javascript">{type: "invSlot", x: число, y: число, size: число, index: число, bitmap: "текстура"}</syntaxhighlight> - создает слот с привзякой к слоту инвентаря - слот инвентаря размера size, синхронизированный со слотом инвентаря с индексом index (от 9 до 45, слоты 0-8 - хотбар)</li> | ||
+ | <li><syntaxhighlight lang="Javascript">{type: "button", x: число, y: число, bitmap: "текстура", bitmap2: "текстура", scale: число, clicker: объект функций клика}</syntaxhighlight> - создает кнопку, функции клика будут вызываться при нажатии на кнопку, если задан bitmap2, то при нажатии кнопку изменит временно текстуру на него. <br /></li> | ||
+ | <li><syntaxhighlight lang="Javascript">{type: "closeButton", x: число, y: число, global: лог.значение, bitmap: "текстура", bitmap2: "текстура", scale: число}</syntaxhighlight> - создает кнопку закрытия окна, если параметр global равен true, то кнопка закроет всю группу окон, а не только данное окно.</li> | ||
+ | <li><syntaxhighlight lang="Javascript">{type: "scale", x: число, y: число, direction: число, bitmap: "текстура", scale: число, invert: bool, overlay: "текстура", overlayScale: число, overlayOffset: {x: число, y: число}}</syntaxhighlight> - создает шкалу в направлении direction, value значение от 0 до 1 - заполненность шкалы(для тестов). Если invert задан и равен true, то позиция вырезки из текстуры будет инвертирована, что создаст видимость того, что шкала как бы выдвигается, а не заполняется. | ||
+ | overlay - если задан, накладывает на шкалу дополнительную текстуру, которая перекрывает ее. | ||
+ | overlayScale - параметр scale для перекрытия. | ||
+ | overlayOffset: {x: , y: } - если задан, задает позицию перекрытия, относительно позиции шкалы. | ||
− | + | Направления: | |
− | + | <ul> | |
− | + | <li>0 - право</li> | |
− | < | + | <li>1 - верх</li> |
− | + | <li>2 - лево</li> | |
− | + | <li>3 - низ</li> | |
− | + | </ul> | |
+ | </li> | ||
+ | <li><syntaxhighlight lang="Javascript">{type: "text", x: число, y: число, width: число, height: число, multiline: bool, format: bool, formatMaxCharsPerLine: число, text: "текст", font: шрифт_текста}</syntaxhighlight> - создает динамичный текст.</li> | ||
+ | <li><syntaxhighlight lang="Javascript">{type: "image", x: число, y: число, bitmap: "текстура", scale: число, overlay: "текстура", overlayScale: число, overlayOffset: {x: число, y: число}, clicker: объект функций клика}</syntaxhighlight> - создает динамичную картинку.</li> | ||
+ | <li><syntaxhighlight lang="Javascript">{type: "scroll", x: число, y: число, length: число, min: число, max: число, isInt: true, value: число}</syntaxhighlight> - создает динамичный слайдер с минимальным значением и максимальным, также текущим значением по умолчанию равное value.</li> | ||
+ | </ul> | ||
− | + | === Стилизация === | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | === Стилизация | ||
Кроме drawing и elements в объекте описания можно определить объект стилизации интерфейса для изменения стандартных текстур элементов. | Кроме drawing и elements в объекте описания можно определить объект стилизации интерфейса для изменения стандартных текстур элементов. | ||
Если какое-то из нижеприведённых значений будет указано в объекте стилизации, оно заменит стандартый параметр. | Если какое-то из нижеприведённых значений будет указано в объекте стилизации, оно заменит стандартый параметр. | ||
− | < | + | <syntaxhighlight lang="Javascript">params: { |
slot: "текстура слота", | slot: "текстура слота", | ||
invSlot: "текстура слота инвентаря", | invSlot: "текстура слота инвентаря", | ||
Строка 106: | Строка 132: | ||
closeButton: "текстура кнопки закрытия", | closeButton: "текстура кнопки закрытия", | ||
closeButton2: "текстура нажатой кнопки закрытия", | closeButton2: "текстура нажатой кнопки закрытия", | ||
− | }</ | + | }</syntaxhighlight> |
+ | <div class="mw-parser-output"> | ||
=== Типы интерфейса === | === Типы интерфейса === | ||
− | + | Интерфейсы бывают 3 типов: [[InnerCore/Введение_в_GUI/Стандартный_интерфейс|Стандартный]], [[InnerCore/Введение_в_GUI/Однооконный_интерфейс|Однооконный]] и [[InnerCore/Введение_в_GUI/Многооконный_интерфейс|Многооконный]]. Объект интерфейса во всех этих случаев создается как объект класса одного из типов, после создания такой объект класса может быть настроен и открыт для любого контейнера. | |
Любой интерфейс может быть протестирован с помощью функции UI.testUI(объект интерфейса); | Любой интерфейс может быть протестирован с помощью функции UI.testUI(объект интерфейса); | ||
− | + | </div> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | < | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Для создания GUI (графический интерфейс пользователя) в Inner Core предусмотрены огромные возможности, которые позволяют не только создавать сложный интерфейс в стиле MCPE (и не только), но и эффективно интегрировать его с остальными игровыми элементами, которые добавляются модами с помощью контейнеров.
Все размеры и координаты в интерфейсе задаются в юнитах, где 1 юнит это 1/1000 от ширины окна, в котором создается интерфейс. Если юниты используются для задания позиции и размера окна, то 1 юнит составляет 1/1000 от ширины экрана (как и в случае, когда окно открыто на весь экран).
//Частые параметры
type: "тип_элемента" - задает тип элемента.
x: число - положение элемента по горизонтали.
y: число - положение элемента по вертикали.
scale: число - сколько юнитов приходится на 1 пиксель текстуры, если этот параметр не указан, он будет равен 1.
bitmap: "текстура" - задает текстуру элементу.
//Для других элементов(частный случай)
text: "текст"- задает текст элементу.
color: цвет - задает цвет,
font: шрифт_текста- задает параметры шрифта, имеет следующий вид:
{color: цвет, shadow: тень(число от 0 до 1), size: размер(в юнитах)}
bg: "текстура" - задает текстуру фона
bitmap2: "текстура" - аналогично.
width: число - ширина элемента.
height: число - высота элемента.
Текстуры интерфейса, которые находятся в папке gui вашего мода, будут загруженны и доступны под именем файла без расширения: "gui/slot.png" будет загружен как "slot". Если в папке gui у вас есть папка и в ней картинка к который вы хотите обратиться то вместо / надо использовать точку, например: папка gui/gui1/image.png - обращение gui1.image Также возможно использование объекта Bitmap вместо имени файла, если возникает такая необходимость.
Цвет задается с помощью метода класса android.api.android.graphics.Color.rgb(r, g, b) - где r, g и b - красная, зеленая и синяя составляющие цвета от 0 до 255 каждая.
Текстурой рамки является текстура размера 16x16, изображающая нужную рамку самого маленького размера, которая будет потом растянута до любых размеров. </div>
Любой интерфейс имеет объект описания, позволяющий задать данный интерфейс и динамично изменять его, меняя этот объект, пока интерфейс открыт. Объект описания любого типа имеет значения drawing (массив) и elements (объект), которые задают отрисовку фона и элементы соответственно. Их изменение из любого места ведет к динамичному изменению интерфейса, если он открыт. Т.е если вы изменените параметры какого-то элемента или команды отрисовки, то интерфейс изменится в соответствии с вашими изменениями.
Элементы отрисовки задаются в объекте описания в массиве drawing и отвечают за отрисовку фона интерфейса. Стоит учесть что каждый элемент будет накладываться послойно(т.е 2й элемент будет сверху 1го и тд).
drawing: [
{/* параметры элемента 1 */},
{/* параметры элемента 2 */},
{/* параметры элемента 3 */},
//....
]
/*Background*/ {type: "background", color: цвет}
/*Bitmap*/ {type: "bitmap", bitmap: "текстура", x: число, y: число, scale: число}
/*Frame*/ {type: "frame", x: число, y: число, width: число, height: число, bitmap: "текстура_рамки", color: цвет, sides: bool, scale: число}
/*Text*/ {type: "text", text: "текст", x: число, y: число, font: шрифт_текста}
/*Line*/ {type: "line", x1: число, y1: число, x2: число, y2: число, width: число, color: цвет}
Background Заполняет весь фон указанным цветом.
Bitmap Отрисовывает данную текстуру на данных координатах.
Frame Отрисовывает рамку данного размера на данных координатах.
Text Отрисовывает данный текст на данных координатах с данным шрифтом.
Line Отрисовывает линию от x1 и y1 до x2 и y2. width - толщина линии в юнитах, по-умолчанию 1, color - цвет линии, по-умолчанию черный.
Элементы задаются в объекте описания в объекте elements, каждый элемент должен иметь уникальное имя. По этим именам с ними можно будет взаимодействовать позже.
elements: {
"name1": {/* элемент 1 */},
"name2": {/* элемент 2 */},
"name3": {/* элемент 3 */},
//....
}
Формат объекта:
{
onClick: function(position, container, tileEntity, window, canvas, scale){
// если задан, задает функцию короткого нажатия
},
onLongClick: function(position, container, tileEntity, window, canvas, scale){
// если задан, задает функцию долгого нажатия
}
//возвращаемые параметры
//position - возвращает позицию касания
// container - контейнер, для которого открыт данный интерфейс
// tileEntity - если интерфейс открыт для какого то tile entity, то передаст его, иначе null
//window - возвращает окно с которого было воспроизведено нажатие
//canvas - возвращает канвас ??
//scale размер элемента ??
}
{type: "slot", x: число, y: число, size: число, isValid: function, visual: bool, bitmap: "текстура", clicker: объект функций клика, needClean: bool, isTransparentBackground: bool}
{type: "invSlot", x: число, y: число, size: число, index: число, bitmap: "текстура"}
{type: "button", x: число, y: число, bitmap: "текстура", bitmap2: "текстура", scale: число, clicker: объект функций клика}
{type: "closeButton", x: число, y: число, global: лог.значение, bitmap: "текстура", bitmap2: "текстура", scale: число}
{type: "scale", x: число, y: число, direction: число, bitmap: "текстура", scale: число, invert: bool, overlay: "текстура", overlayScale: число, overlayOffset: {x: число, y: число}}
overlay - если задан, накладывает на шкалу дополнительную текстуру, которая перекрывает ее. overlayScale - параметр scale для перекрытия. overlayOffset: {x: , y: } - если задан, задает позицию перекрытия, относительно позиции шкалы.
Направления:
{type: "text", x: число, y: число, width: число, height: число, multiline: bool, format: bool, formatMaxCharsPerLine: число, text: "текст", font: шрифт_текста}
{type: "image", x: число, y: число, bitmap: "текстура", scale: число, overlay: "текстура", overlayScale: число, overlayOffset: {x: число, y: число}, clicker: объект функций клика}
{type: "scroll", x: число, y: число, length: число, min: число, max: число, isInt: true, value: число}
Кроме drawing и elements в объекте описания можно определить объект стилизации интерфейса для изменения стандартных текстур элементов.
Если какое-то из нижеприведённых значений будет указано в объекте стилизации, оно заменит стандартый параметр.
params: {
slot: "текстура слота",
invSlot: "текстура слота инвентаря",
frame: "текстура обычной рамки",
selection: "текстура выделения слота",
closeButton: "текстура кнопки закрытия",
closeButton2: "текстура нажатой кнопки закрытия",
}
Интерфейсы бывают 3 типов: Стандартный, Однооконный и Многооконный. Объект интерфейса во всех этих случаев создается как объект класса одного из типов, после создания такой объект класса может быть настроен и открыт для любого контейнера.
Любой интерфейс может быть протестирован с помощью функции UI.testUI(объект интерфейса);