как сделать круглые кнопки.

Версия Minecraft
1.7.10
7,099
324
1,510
Текстуру кнопки свою юзать
 
1,015
9
102
250
12
24
Если ты хочешь просто кнопку с круглой текстурой, то создай свой GuiButton и там укажи свою текстуру.
В это случае при наведении на углы кнопка будет так-же срабатывать.
Если ты хочешь чтобы она срабатывала только в этом круге, то бери ширину-высоту(желательно что-бы они были одинаковые) и дели пополам. Так найдешь центр этого квадрата и укажи радиус кнопки, а потом простой формулой смотри находится ли курсор в этом круге. Если да то выполняй действие.
Могу набросать код, если надо.
 
RinKirin написал(а):
Если ты хочешь просто кнопку с круглой текстурой, то создай свой GuiButton и там укажи свою текстуру.
В это случае при наведении на углы кнопка будет так-же срабатывать.
Если ты хочешь чтобы она срабатывала только в этом круге, то бери ширину-высоту(желательно что-бы они были одинаковые) и дели пополам. Так найдешь центр этого квадрата и укажи радиус кнопки, а потом простой формулой смотри находится ли курсор в этом круге. Если да то выполняй действие.
Могу набросать код, если надо.

Давай код,буду рад
 
5,021
47
784

Icosider

Kotliner
Администратор
3,603
99
664
250
12
24
Вот тебе гуи
Код:
public class GuiCircleButton extends GuiScreen
{
 public void drawScreen(int x, int y, float ticks)
 {
 drawDefaultBackground();
 super.drawScreen(x, y, ticks);
 }
 
 @Override
 public void initGui()
 {
 buttonList.clear();
     this.buttonList.add(new CircleButton(3, 50, 50, 64, 64,I18n.format("Test", new Object[0])));
 
 super.initGui();
 }
 
 protected void actionPerformed(GuiButton button)
 {
 switch(button.id)
 {
 case 101:
 {
 this.mc.displayGuiScreen(new SkillGUI());
 break;
 }
 
 }
 super.actionPerformed(button);
 }
 
 public boolean doesGuiPauseGame()
   {
 return false;
   }
 
 
 
}
Простейший пример.

Вот кнопка
Код:
public class CircleButton extends GuiButton
{
 
 
    protected final ResourceLocation texture = new ResourceLocation(ModInfo.MODID + ":" + "textures/button.png");
    
    public CircleButton(int id, int x, int y, String title){
 this(id, x, y, 30, 30, title);
 }

    public CircleButton(int id, int x, int y, int width, int height, String title){
 super(id, x, y, width, height, title);

 }


    /**
     * Draws this button to the screen.
     */
    public void drawButton(Minecraft p_146112_1_, int mouseX, int mouseY)
    {

        if (this.visible)
        {
         int r=30;
            FontRenderer fontrenderer = p_146112_1_.fontRenderer;
            p_146112_1_.getTextureManager().bindTexture(texture);
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
            this.field_146123_n = (Math.sqrt(Math.pow(mouseX-(this.xPosition+32), 2) + Math.pow(mouseY - (this.yPosition+32), 2))) <= r;
            int k = this.getHoverState(this.field_146123_n);
            GL11.glEnable(GL11.GL_BLEND);
            OpenGlHelper.glBlendFunc(770, 771, 1, 0);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, 0, 64, 64);
            this.mouseDragged(p_146112_1_, mouseX, mouseY);
            int l = 14737632;

            if (packedFGColour != 0)
            {
                l = packedFGColour;
            }
            else if (!this.enabled)
            {
                l = 10526880;
            }
            else if (this.field_146123_n)
            {
                l = 16713736;
            }

            this.drawCenteredString(fontrenderer, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, l);
        }
    }

    /**
     * Fired when the mouse button is dragged. Equivalent of MouseListener.mouseDragged(MouseEvent e).
     */
    protected void mouseDragged(Minecraft p_146119_1_, int p_146119_2_, int p_146119_3_) 
    {
     
    }

    /**
     * Fired when the mouse button is released. Equivalent of MouseListener.mouseReleased(MouseEvent e).
     */
    public void mouseReleased(int p_146118_1_, int p_146118_2_)
    {
     
    }

    /**
     * Returns true if the mouse has been pressed on this control. Equivalent of MouseListener.mousePressed(MouseEvent
     * e).
     */
    public boolean mousePressed(Minecraft p_146116_1_, int p_146116_2_, int p_146116_3_)
    {
        return this.enabled && this.visible && p_146116_2_ >= this.xPosition && p_146116_3_ >= this.yPosition && p_146116_2_ < this.xPosition + this.width && p_146116_3_ < this.yPosition + this.height;
    }

    public boolean func_146115_a()
    {
        return this.field_146123_n;
    }

    public void func_146111_b(int p_146111_1_, int p_146111_2_) {}

    public void func_146113_a(SoundHandler p_146113_1_)
    {
        p_146113_1_.playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
    }

    public int getButtonWidth()
    {
        return this.width;
    }

    public int func_154310_c()
    {
        return this.height;
    }
}

Даже текстурку держи
Надеюсь куда засунуть её, найдешь.
 

Icosider

Kotliner
Администратор
3,603
99
664
Minebot написал(а):
Ivasik написал(а):
Ахах, копипаст дефолтной кнопки. Удачи с этим овном. От круглой кнопки тут только текстура.

Так это самый простой вариант

Начнем с того, что он скопировал класс нопки, хотя мог его унаследовать и сделать в 10 раз проще. А во вторых автору нужно задавать форму кнопки...
 
1,015
9
102
Ivasik написал(а):
Minebot написал(а):
Ivasik написал(а):
Ахах, копипаст дефолтной кнопки. Удачи с этим овном. От круглой кнопки тут только текстура.

Так это самый простой вариант

Начнем с того, что он скопировал класс нопки, хотя мог его унаследовать и сделать в 10 раз проще. А во вторых автору нужно задавать форму кнопки...

Ну да, над было унаследовать. Так форма кнопки задается текстурой плюс формула (x-a)^2 + (y-b)^2=r^2
 

Icosider

Kotliner
Администратор
3,603
99
664
Minebot написал(а):
Ivasik написал(а):
А пои наведении будет контур квадратный, а не круглый, гениально!

У гуишных кнопок есть контур? Не знал, не юзал стандартные кнопки. Тогда окей

Это не совсем контур(я его так называю), так как идёт вычисление позиции курсора:
mouseX >= posX && mouseY >= posY && mouseX < posX + width && mouseY < posY + height;
И в данном случае "контур" будет квадратным и тем самым это будет псевдо круглая кнопка. Я в какой то теме уже скидывал код круглой кнопки, если автор не поленится, найдёт...
 
Ivasik написал(а):
Minebot написал(а):
Ivasik написал(а):
А пои наведении будет контур квадратный, а не круглый, гениально!

У гуишных кнопок есть контур? Не знал, не юзал стандартные кнопки. Тогда окей

Это не совсем контур(я его так называю), так как идёт вычисление позиции курсора:
mouseX >= posX && mouseY >= posY && mouseX < posX + width && mouseY < posY + height;
И в данном случае "контур" будет квадратным и тем самым это будет псевдо круглая кнопка. Я в какой то теме уже скидывал код круглой кнопки, если автор не поленится, найдёт...
Ты скидывал код отрисованного круга, но не кнопки.
 
Сверху