- 11
- 1
- 1
Ну... такс... [Решение]
Правила форума гласит - сначало сам разберись....
ХМММММММММММММММММММММ- разобрался,
Короче, там на 26.1 в отличи от 1.21.11 - Всё очень разделено, прям конкретненько
в 1.21.11 для содания своего UI или GUI достаточно было реализовать класс, который бы наследовался от "Я уже не понмю но чот интерфейс InputHandler" - вероятно я не помню
Ну можно* было обойтись и без наследования, главное реализовать mouseClick - или MousePressed и MouseRelesed -
А потом в Screen или его наследнике - К примеру если кастомный экран, для GUI то просто нужно было, обьявит все функции - или нужные* функции такие как
и в них уже {
Цыкл элементов "Item"
item.mousePressed() или item.mouseRelesed() или item.mouseDrag()
}
Ну если давать пример кода :
А далее, уже в screen :
И ну остальное делалось за меня
"Я без понятия что ещё можно написать, задайте вопрос если чот не понятно ладно?
"
Ранее а именно 1.21.11 такое было достаточно, но щяс, твой кастомный элемент должен быть более подстроенным под Некие критерии!?
Если так подумать, принципе нечего не изменилось.
Просто теперь в Screen надо добавить свой кастомный элемент в wighet - через
И короче Прикол в том, что как видно по названию, это для Rendera, ну тоесть, он за тебя, будет вызывать вот такой фрагментик
И я логический подумал, и пришёл к "К сожелению" тупому решению, сделать так ::
По моей чудо логике, должно было заработать и касании* водд короче говоря -
Почему? А потому-что, addWiget внутри себя делает проверку на наличия наследствия от таких интерфейсов как :
И вот, мой InputFragment - Содержит наследия\подключён интерфейс GuiEventListener и! Renderable
Если что Renderable и GuiEventListener Шаблон* или Абстракции, те мотодов, а именно: [Которых нужно реализовать, сам по себе можно обойтись без наследования, но тогда Screen не захочет рендерить или Обрабатывать вод, но пока, он и с ними этого не делает...]
1]
2]
3]
По сей чудо логике, если мой интерфейс\GUI наследует от нашего GuiEventListener, то Screen должен сам его обрабатывать их реализации в моём Элементе который я добавил в его список Wighets которых он обновляет данных иrender > extractRenderState
Кстати меня пугает это название : extractRenderState - О какое State идёт речь, и почему extract, что им обычный render сделал, что они решили его заменить... Кто разбираеться лучше, можете по приколу ответить на этот вопрос, может я вообще не туда лезу... я видел у . . . . . . . забыл имя класса, плохо... ну в 26.1 есть, методы которые делают отрисовку по стандарту через render() а не extractRenderState() И лично я, не вижу разницы в работе, притом, рендер работает полностью исправно, А ВОТ касания, игнорируеться...
Я не понимаю в чём дело... вроде всё правильно, как и почему
А вот похожа функция, но без Renderable по середине просто
И при этом, в закулисии, не занимаеться их обработкой? - Когда
Может дело в заглушке? У меня класс элемента* В конце содержит такую заглушку для NarratableEntry
Если вы не полняли что тут происходит... это печально, а то я не знаю как ещё можно обьяснить...
Если кратко, игнориуеться касания, как и касания, так и hover, ну я вообще могу в executeRenderState() {Тут} - делать проверки и тд и тп, или в главной игровой цыкле, сделать эти проверки к всем обьектам на экране, и если есть совпадения, то у него вызвать всё что нужно по коду* но звучит не рентабельно. Ведь явно это можно сделать по проше
Это, мой первый пост, где-либо... не где н просил помошь, из-за чего не один проект не дожил до релиза :3
Но в отличии от этой, там баги бывали более маштабными, что либо знаний не хватало для решений, либо не мог нати источник где можно понять, что делать в таких нестандартных или стандартных но для меня нестандартных сетуациях
[Решение]
Правила форума гласит - сначало сам разберись....
ХМММММММММММММММММММММ- разобрался,
Короче, там на 26.1 в отличи от 1.21.11 - Всё очень разделено, прям конкретненько
в 1.21.11 для содания своего UI или GUI достаточно было реализовать класс, который бы наследовался от "Я уже не понмю но чот интерфейс InputHandler" - вероятно я не помню
Ну можно* было обойтись и без наследования, главное реализовать mouseClick - или MousePressed и MouseRelesed -
А потом в Screen или его наследнике - К примеру если кастомный экран, для GUI то просто нужно было, обьявит все функции - или нужные* функции такие как
MousePressed()[B]MouseRelesed()[/B]MouseDrag()и в них уже {
Цыкл элементов "Item"
item.mousePressed() или item.mouseRelesed() или item.mouseDrag()
}
Ну если давать пример кода :
Псевдо-код : Типо мой Кастомный GUI елемент:
public void MousePressed(double MouseX,double MouseY,float delta) {
if (isHovered(MouseX,MouseY)) {
this.isPressed = true;
this.setFocus(this.isPressed)
return true;
}
return false;
}
public void MouseRelesed(double MouseX,double MouseY,float delta) {
this.isPressed = false;
return true;
}
А далее, уже в screen :
Псведо* - GUI_Element наследствии от Screen:
import local.namel.client.gui.CustomElement;
public class Element extends Screen {
private CustomElement ElMent = new CustomElement();
protected list<CustomElement> ScreenItems = new ArrayList<?>(); // Э... чот не помню, ну ладно...
@overide
public void Init(String title) {
ElMent.setPosX(32);
ElMent.setPosY(32);
super(title)
}
// ... Какой то код, там рендер и тд
@overide
public void MousePressed(double MouseX,double MouseY,float delta) {
for (i : CustomElement ScreenItems) {
if (i instanceof InputHandler) // Интерфейс, с помощью которого можно проверить подерживает ли он отклит* Водд
{
i.MousePressed(MouseX,MouseY,delta);
}
}
return true;
}
@overide
public void MouseRelesed(double MouseX,double MouseY,float delta) {
for (i : CustomElement ScreenItems) {
if (i instanceof InputHandler) // Интерфейс, с помощью которого можно проверить подерживает ли он отклит* Водд
{
i.MouseRelesed(MouseX,MouseY,delta);
}
}
return true;
}
// ... Какой то код, там дальнешая обработка, и дополнительные функции отрисовки, блюр итд
}
И ну остальное делалось за меня
Ранее а именно 1.21.11 такое было достаточно, но щяс, твой кастомный элемент должен быть более подстроенным под Некие критерии!?
Если так подумать, принципе нечего не изменилось.
Просто теперь в Screen надо добавить свой кастомный элемент в wighet - через
addRenderableWidget(?):
InputFragment.setPos_X(Fragment.getPos_X()+Fragment.getSize_X()+32);
InputFragment.setPos_Y(32);
this.addRenderableWidget(InputFragment);
// Это все делаеться в Init! Разовая растоновка..
InputFragment.extractRenderState(guiGraphics,mouseX,mouseY,partialTick);И я логический подумал, и пришёл к "К сожелению" тупому решению, сделать так ::
this.addWidget(InputFragment); По моей чудо логике, должно было заработать и касании* водд короче говоря -
Почему? А потому-что, addWiget внутри себя делает проверку на наличия наследствия от таких интерфейсов как :
GuiEventListener и Renderable и ещё Нуратебл - ток я не смог его найти в коде 0_-, я забыл где он проверялся,И вот, мой InputFragment - Содержит наследия\подключён интерфейс GuiEventListener и! Renderable
Если что Renderable и GuiEventListener Шаблон* или Абстракции, те мотодов, а именно: [Которых нужно реализовать, сам по себе можно обойтись без наследования, но тогда Screen не захочет рендерить или Обрабатывать вод, но пока, он и с ними этого не делает...]
1]
void extractRenderState(final GuiGraphicsExtractor graphics, int mouseX, int mouseY, final float a); - Это как старый render() {}2]
InputHandler но теперь GuiEventListener:
public interface GuiEventListener extends TabOrderedElement {
default void mouseMoved(final double x, final double y) {
}
default boolean mouseClicked(final MouseButtonEvent event, final boolean doubleClick) {
return false;
}
default boolean mouseReleased(final MouseButtonEvent event) {
return false;
}
default boolean mouseDragged(final MouseButtonEvent event, final double dx, final double dy) {
return false;
}
default boolean mouseScrolled(final double x, final double y, final double scrollX, final double scrollY) {
return false;
}
// . . . :: code
Что-то для того- чтобы, была подержка диктора, но я просто вставил заглушки и всё, кстати... зачем диктор в игре? Притом выжевания где важна скорость и точность.... (Ну по крайнее мере в онлайне)По сей чудо логике, если мой интерфейс\GUI наследует от нашего GuiEventListener, то Screen должен сам его обрабатывать их реализации в моём Элементе который я добавил в его список Wighets которых он обновляет данных и
Кстати меня пугает это название : extractRenderState - О какое State идёт речь, и почему extract, что им обычный render сделал, что они решили его заменить... Кто разбираеться лучше, можете по приколу ответить на этот вопрос, может я вообще не туда лезу... я видел у . . . . . . . забыл имя класса, плохо... ну в 26.1 есть, методы которые делают отрисовку по стандарту через render() а не extractRenderState() И лично я, не вижу разницы в работе, притом, рендер работает полностью исправно, А ВОТ касания, игнорируеться...
Я не понимаю в чём дело... вроде всё правильно, как и почему
this.addRenderableWidget(InputFragment); Выполняет свою работу, и рендер происходит без ручного создания цыкла фор, в extractRenderState() у наследника Screen А вот похожа функция, но без Renderable по середине просто
this.addWidget(InputFragment); - не выполняет работу по обработке вода. Я пытался найти что-то подобии this.add[B]GuiListener[/B]Widget(InputFragment) - Но либо я слепой, либо такого там нет. ПРИТОМ, почему this.addWidget(InputFragment);, Требует от элемента, наследия интерфейсов " [ GuiEventListener & NarratableEntry ] "И при этом, в закулисии, не занимаеться их обработкой? - Когда
this.addRenderableWidget(InputFragment); Который Требует от элемента, наследия интерфейсов " [ GuiEventListener & Renderable & NarratableEntry ] " - . . . Нечего не понял, я думал он только Renderable требует, а нет... там ещё и GuiEventListener...Может дело в заглушке? У меня класс элемента* В конце содержит такую заглушку для NarratableEntry
Как думаете? Эти заглушка, как-то бьёт по работоспособности GuiEventListener:
public class InputBLayout extends BLayout implements GuiEventListener, NarratableEntry {
// BLayout содержит в себе implements к Renderable!
// ... code ...
@Override
public NarrationPriority narrationPriority() {
return null;
}
@Override
public void updateNarration(NarrationElementOutput output) {
}
}
Если вы не полняли что тут происходит... это печально, а то я не знаю как ещё можно обьяснить...
Если кратко, игнориуеться касания, как и касания, так и hover, ну я вообще могу в executeRenderState() {Тут} - делать проверки и тд и тп, или в главной игровой цыкле, сделать эти проверки к всем обьектам на экране, и если есть совпадения, то у него вызвать всё что нужно по коду* но звучит не рентабельно. Ведь явно это можно сделать по проше
Это, мой первый пост, где-либо... не где н просил помошь, из-за чего не один проект не дожил до релиза :3
Но в отличии от этой, там баги бывали более маштабными, что либо знаний не хватало для решений, либо не мог нати источник где можно понять, что делать в таких нестандартных или стандартных но для меня нестандартных сетуациях
[Решение]
Последнее редактирование: