Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
− | + | ||
Как упоминалось в уроках ранее, объект описания интерфейса можно изменять, пока интерфейс открыт и изменения тут же будут отображаться в интерфейсе. Больше всего это подходит для элементов, которые должны появляться/изменяться/исчезать только в каких-то определенных условиях (например кнопка, которая появляется, только если в слоте есть предмет) | Как упоминалось в уроках ранее, объект описания интерфейса можно изменять, пока интерфейс открыт и изменения тут же будут отображаться в интерфейсе. Больше всего это подходит для элементов, которые должны появляться/изменяться/исчезать только в каких-то определенных условиях (например кнопка, которая появляется, только если в слоте есть предмет) | ||
+ | |||
+ | === === | ||
=== Получение объекта описания === | === Получение объекта описания === | ||
По скольку интерфейс всегда открывается для контейнера, то контейнер имеет метод получения объекта описания интерфейса для динамичного изменения. Этот метод - getGuiContent() - упоминался в прошлой главе и теперь будет разобран подробнее. | По скольку интерфейс всегда открывается для контейнера, то контейнер имеет метод получения объекта описания интерфейса для динамичного изменения. Этот метод - getGuiContent() - упоминался в прошлой главе и теперь будет разобран подробнее. | ||
+ | |||
+ | | ||
Формат объекта описания можно посмотреть в предыущих главах, там же говорится, что динамичными (т.е. изменения которых тут же отобразятся в интерфейсе), являются только части, отвечающие за фон и за элементы - drawing и elements, но не параметры самого интерфейса (заголовок, размер и т.п) | Формат объекта описания можно посмотреть в предыущих главах, там же говорится, что динамичными (т.е. изменения которых тут же отобразятся в интерфейсе), являются только части, отвечающие за фон и за элементы - drawing и elements, но не параметры самого интерфейса (заголовок, размер и т.п) | ||
+ | |||
+ | | ||
И так, предположим мы получили объект описания: | И так, предположим мы получили объект описания: | ||
− | < | + | <pre>var content = container.getGuiContent();</pre> |
+ | |||
+ | | ||
Теперь, чтобы изменить в нем фон, мы можем просто присвоить drawing новое значение: | Теперь, чтобы изменить в нем фон, мы можем просто присвоить drawing новое значение: | ||
− | < | + | <pre>content.drawing = [ |
− | + | ||
− | ] // мы удалили все прошлые команды и теперь рисуем просто красный фон</ | + | {type: "background", color: android.graphics.Color.RED} |
+ | |||
+ | ] // мы удалили все прошлые команды и теперь рисуем просто красный фон</pre> | ||
+ | |||
+ | | ||
С элементами все несколько иначе, чтобы что-то сделать с элементом, нужно обратиться к нему по его имени: content.elements["имя элемента"], после чего с ним можно сделать 3 разных действия: | С элементами все несколько иначе, чтобы что-то сделать с элементом, нужно обратиться к нему по его имени: content.elements["имя элемента"], после чего с ним можно сделать 3 разных действия: | ||
+ | |||
+ | | ||
1. Приравнять новому элементу - если элемент с данным именем уже существовал, то старый будет полностью заменен на новый, если элемента не было, то будет просто создан новый элемент | 1. Приравнять новому элементу - если элемент с данным именем уже существовал, то старый будет полностью заменен на новый, если элемента не было, то будет просто создан новый элемент | ||
Строка 23: | Строка 37: | ||
3. Приравнять null - элемент с данным именем будет удален | 3. Приравнять null - элемент с данным именем будет удален | ||
+ | |||
+ | | ||
ПРИМЕР #1: (изменение параметров) | ПРИМЕР #1: (изменение параметров) | ||
− | < | + | <pre>// код ниже при старте откроет интерфейс с 1 кнопкой, при нажатии на которую она будет перемещаться вниз |
+ | |||
var testUIScreen = new UI.StandartWindow({ | var testUIScreen = new UI.StandartWindow({ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | standart: { | |
− | |||
− | |||
− | + | header: { | |
− | |||
− | |||
− | |||
− | + | text: { | |
+ | |||
+ | text: "TEST UI" | ||
+ | |||
+ | } | ||
+ | |||
+ | }, | ||
+ | |||
+ | inventory: { | ||
+ | |||
+ | standart: true | ||
+ | |||
+ | }, | ||
+ | |||
+ | background: { | ||
+ | |||
+ | standart: true | ||
+ | |||
+ | } | ||
+ | |||
+ | }, | ||
+ | |||
+ | drawing: [], | ||
+ | |||
+ | elements: { | ||
+ | |||
+ | "test_button": {type: "button", bitmap: "close_button_up", x: 400, y: 100, scale: 8, clicker: { // самая обычная кнопка с именем test_button | ||
+ | |||
+ | onClick: function(container){ // функция короткого нажатия, все параметры кроме первого опущены за ненадобностью | ||
+ | |||
+ | var content = container.getGuiContent(); // получаем объект описания, по скольку кнопку можно нажать только с открытым интерфейсом, то он точно определен | ||
+ | |||
+ | content.elements["test_button"].y += 10; // немного сдвигаем кнопку вниз, добавляя 10 к координате y | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
}); | }); | ||
// открыть интерфейс | // открыть интерфейс | ||
− | UI.testUI(testUIScreen);</ | + | |
+ | UI.testUI(testUIScreen);</pre> | ||
+ | |||
+ | | ||
ПРИМЕР #2: (удаление и создание) | ПРИМЕР #2: (удаление и создание) | ||
− | < | + | <pre>// после нажатия на кнопку, удаляет ее и создает текст о том, что она удалена |
+ | |||
var testUIScreen = new UI.StandartWindow({ | var testUIScreen = new UI.StandartWindow({ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | standart: { | |
− | + | ||
− | + | header: { | |
+ | |||
+ | text: { | ||
+ | |||
+ | text: "TEST UI" | ||
+ | |||
+ | } | ||
+ | |||
+ | }, | ||
+ | |||
+ | inventory: { | ||
+ | |||
+ | standart: true | ||
+ | |||
+ | }, | ||
+ | |||
+ | background: { | ||
+ | |||
+ | standart: true | ||
+ | |||
+ | } | ||
+ | |||
+ | }, | ||
+ | |||
+ | drawing: [], | ||
+ | |||
+ | elements: { | ||
+ | |||
+ | "test_button": {type: "button", bitmap: "close_button_up", x: 400, y: 100, scale: 8, clicker: { // самая обычная кнопка с именем test_button | ||
+ | |||
+ | onClick: function(container){ // функция короткого нажатия, все параметры кроме первого опущены за ненадобностью | ||
+ | |||
+ | var content = container.getGuiContent(); // получаем объект описания, по скольку кнопку можно нажать только с открытым интерфейсом, то он точно определен | ||
+ | |||
+ | content.elements["test_button"] = null; // удаляем кнопку | ||
+ | |||
+ | content.elements["new_element"] = {type: "text", text: "button removed", x: 400, y: 50, width: 200, height: 50}; // создаем текст о том, что она удалена | ||
− | + | } | |
− | |||
− | |||
− | |||
− | + | } | |
+ | |||
+ | } | ||
+ | |||
+ | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
}); | }); | ||
// открыть интерфейс | // открыть интерфейс | ||
− | UI.testUI(testUIScreen);</ | + | |
+ | UI.testUI(testUIScreen);</pre> | ||
+ | |||
+ | | ||
ПРИМЕР #3: (полная замена + изменение фона) | ПРИМЕР #3: (полная замена + изменение фона) | ||
− | < | + | <pre>// после нажатия на кнопку, удаляет ее и создает текст о том, что она удалена, а так же делает фон красным |
+ | |||
var testUIScreen = new UI.StandartWindow({ | var testUIScreen = new UI.StandartWindow({ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | standart: { | |
− | + | ||
− | + | header: { | |
+ | |||
+ | text: { | ||
+ | |||
+ | text: "TEST UI" | ||
+ | |||
+ | } | ||
+ | |||
+ | }, | ||
+ | |||
+ | inventory: { | ||
− | + | standart: true | |
− | |||
− | |||
− | |||
− | + | }, | |
+ | |||
+ | background: { | ||
+ | |||
+ | standart: true | ||
+ | |||
+ | } | ||
+ | |||
+ | }, | ||
+ | |||
+ | drawing: [], | ||
+ | |||
+ | elements: { | ||
+ | |||
+ | "test_button": {type: "button", bitmap: "close_button_up", x: 400, y: 100, scale: 8, clicker: { // самая обычная кнопка с именем test_button | ||
+ | |||
+ | onClick: function(container){ // функция короткого нажатия, все параметры кроме первого опущены за ненадобностью | ||
+ | |||
+ | var content = container.getGuiContent(); // получаем объект описания, по скольку кнопку можно нажать только с открытым интерфейсом, то он точно определен | ||
+ | |||
+ | content.elements["test_button"] = {type: "text", text: "button removed", x: 400, y: 50, width: 200, height: 50}; // заменяем элемент кнопки на текст о том, что она удалена | ||
+ | |||
+ | content.drawing = [ | ||
+ | |||
+ | {type: "background", color: android.graphics.Color.RED} | ||
+ | |||
+ | ]; // мы удалили все прошлые команды и теперь рисуем просто красный фон | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
}); | }); | ||
// открыть интерфейс | // открыть интерфейс | ||
− | UI.testUI(testUIScreen);</ | + | |
+ | UI.testUI(testUIScreen);</pre> | ||
+ | |||
+ | | ||
ПРИМЕР #4: (tile entity): | ПРИМЕР #4: (tile entity): | ||
− | < | + | <pre>// добавляет tile entity интерфейс с кнопкой, которая медленно опускается, пока интерфейс открыт |
+ | |||
var testUIScreen = new UI.StandartWindow({ | var testUIScreen = new UI.StandartWindow({ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | standart: { | |
− | |||
− | |||
− | + | header: { | |
− | |||
− | |||
− | |||
− | + | text: { | |
− | + | text: "TEST UI" | |
+ | |||
+ | } | ||
+ | |||
+ | }, | ||
+ | |||
+ | inventory: { | ||
+ | |||
+ | standart: true | ||
+ | |||
+ | }, | ||
+ | |||
+ | background: { | ||
+ | |||
+ | standart: true | ||
+ | |||
+ | } | ||
+ | |||
+ | }, | ||
+ | |||
+ | drawing: [], | ||
+ | |||
+ | elements: { | ||
+ | |||
+ | "test_button": {type: "button", bitmap: "close_button_up", x: 400, y: 100, scale: 8, clicker: { // самая обычная кнопка с именем test_button | ||
+ | |||
+ | onClick: function(container){/* ничего не делаем при клике */} | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
}); | }); | ||
− | + | ||
+ | Прототип tile entity: | ||
+ | |||
{ | { | ||
− | |||
− | |||
− | |||
− | |||
− | + | // ... | |
− | + | ||
− | + | getGuiScreen: function(){ // функция получения интерфейса - отдаем наш интерфейс | |
− | + | ||
− | + | return testUIScreen; | |
− | + | ||
− | + | }, | |
− | } | + | |
− | + | ||
− | + | ||
+ | tick: function(){ | ||
+ | |||
+ | var content = this.container.getGuiContent(); // пытаемся получить объект описания | ||
+ | |||
+ | if (content){ // если получить удалось | ||
+ | |||
+ | content.elements["test_button"].y += .3; // медленно сдвигаем кнопку вниз | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | // ... | ||
+ | |||
+ | }</pre> |