[Туториал]Меняем положение ванильного гуи в игре

771
5
Надо было мне, кароче, нарисовать свое гуи в игре, но мне мешало стандартное(Индикатор еды).
Туториал маленький и очень простой, но думаю, что кому-то да пригодится.
Весь урок будет основываться на событиях. Если вы не знаете что это такое и как ими пользоваться - загляните сюда.
Итак, начнем.
Для начала, создадим класс с любым именем, у меня он будет называется ChangeGUIPosition.
Напишем в него это:

Код:
@ForgeSubscribe
public void render(RenderGameOverlayEvent.Pre event){
    if(event.type == ElementType.FOOD){
        GL11.glPushMatrix();
        GL11.glTranslatef(0.0F, -10.0F, 0.0F);
    }
}

@ForgeSubscribe
public void render(RenderGameOverlayEvent.Post event){
    if(event.type == ElementType.FOOD){
        GL11.glPopMatrix();
    }
}

Вместо ElementType.FOOD пишите любое другое гуи.
Здесь пишите координаты, на сколько и куда хотите сместить по x, y, z: GL11.glTranslatef(0.0F, -10.0F, 0.0F).
Вот и все.
Осталось только зарегистрировать наш ивент в клиент прокси:

Код:
MinecraftForge.EVENT_BUS.register(new ChangeGUIPosition());
Готово!
 
905
5
А еще можно вращать, наклонять, менять текстуру и просто издеваться.
 
771
5
Ну естественно, это уже и самому можно сделать.
 
Будьте добры, расскажите подробнее о наклоне и прочих прочих шалостях в этом смысле. Ну и так же, как допустим вообще отменить рендер этой дряни. Буду благодарен.
 
771
5
minecraftsrv написал(а):
Будьте добры, расскажите подробнее о наклоне и прочих прочих шалостях в этом смысле. Ну и так же, как допустим вообще отменить рендер этой дряни. Буду благодарен.
Поворот - GL11.glRotatef(angle, x, y, z);
Отмена - event.setCanceled(true);
 
905
5
Шатание размера - через GL11.glScalef(x,y,z);
Текстура - через renderEngine.bindTexture.
Еще через магию
Код:
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
Код:
        GL11.glDisable(GL11.GL_BLEND);
можно запилить прозрачность. Ну и так далее.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172

necauqua

когда-то был anti344
Администратор
1,216
27
172
Ладно, я был не прав, там есть x, y и z, но в таком случае - где градусы?
 
905
5
Какие градусы, о великий Омич? Это растягивание по X, Y и Z.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Ой блин. Это что, растягивание я не вращение? Фааак.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
RenderGameOverlayEvent
И еще ElementType.FOOD
О чём-то говорит.
[merge_posts_bbcode]Добавлено: 13.07.2014 22:45:00[/merge_posts_bbcode]

Есть короче DrawScreenEvent.Pre и DrawScreenEvent.Post в новых версиях(начиная с 1.7.2 походу) с которыми можно проделать те же манипуляции, что и в туториале.
 
Majestic написал(а):
minecraftsrv написал(а):
Будьте добры, расскажите подробнее о наклоне и прочих прочих шалостях в этом смысле. Ну и так же, как допустим вообще отменить рендер этой дряни. Буду благодарен.
Поворот - GL11.glRotatef(angle, x, y, z);
Отмена - event.setCanceled(true);
Можно подробней с поворотом, в скобках как значение ставятся, пытался менять, но у меня вовсе пропал нужны худ
[merge_posts_bbcode]Добавлено: 30.07.2014 21:14:54[/merge_posts_bbcode]

RedEnergy написал(а):
А можно ли таким методом изменять другие гуи игры? Например меню настроек или главное меню?
Такой же вопрос
 
1,990
18
105
HanteR12372 написал(а):
Можно подробней с поворотом, в скобках как значение ставятся, пытался менять, но у меня вовсе пропал нужны худ
glRotate тебе не подойдет.
Тебе надо отразить текстуру, а он может повернуть на 180 градусов и ты будешь смотреть на жизни вверх-ногами.
 
Сверху