Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Вопрос Гуи проблема

ППХУДЕР
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
10 Фев 2020
Сообщения
428
Реакции
24
Вообщем начал написание гуишки, наговнокодил кое какие кнопки, вроде бы сначала все работало, а потом оказалось, что переливание при наведении курсором на кнопки не работает если их несколько, если же инициализирована только одна, то все работает как нужно
Код самой кнопки:
Код:
Expand Collapse Copy
public class ButtonUI {

    private int widthc;
    private int heightc;
    private int xc;
    private int yc;
    private String modulec;
    private static boolean toggle = false;
    private static boolean hovered = false;
    public float prt;
    static float[] bc = new float[]{0};

    Color fadet = Color.getHSBColor(0.666f, 0.46f, 1f);
    private static float ticks;

    public ButtonUI(int height, int width, String function, String module, FontRenderer fontRenderer, int x, int y, RenderHUDEvent e){
        widthc = width;
        heightc = height;
        xc = x;
        yc = y;
        modulec = module;
        OnButton(e, width, x, height, y, fontRenderer, function, module);
    }
    @EventTarget
    public void getprt(Render3DEvent e){
        prt = e.getPartialTicks();
    }

    public static double getCursorPosX(long windowID) {
        DoubleBuffer posX = BufferUtils.createDoubleBuffer(1);
        GLFW.glfwGetCursorPos(windowID, posX, null);
        return posX.get(0);
    }

    public static double getCursorPosY(long windowID) {
        DoubleBuffer posY = BufferUtils.createDoubleBuffer(1);
        GLFW.glfwGetCursorPos(windowID, null, posY);
        return posY.get(0);
    }

     void OnButton(RenderHUDEvent e, int width, int x, int height, int y, FontRenderer fontRenderer, String function, String module) {
        ticks++;
        
         if (getCursorPosX(MainWindow.handle) > (widthc / 12f * 4 + 7 + xc) * 2 && getCursorPosX(MainWindow.handle) < (widthc / 12f * 5 - 7 + xc) * 2 && getCursorPosY(MainWindow.handle) > (heightc / 10f * 3 + 19 + yc) * 2 && getCursorPosY(MainWindow.handle) < (heightc / 10f * 3 + yc + 35) * 2) {
             hovered = true;
         }else{
             hovered = false;
         }
         if(hovered){
             bc[0] += 0.05f; if(bc[0] > 3) bc[0] = 3f;
         }else{
             bc[0] -= 0.05f; if (bc[0] < 0) bc[0] = 0;
         }
        AbstractGui.fill(e.getMatrixStack(), width / 12 * 4 + 7 + x, height / 10 * 3 + 19 + y, width / 12 * 5 -7  + x, height / 10 * 3 + y + 35, Mainx.getModuleManager().getModule(module).toggled ? fadet.hashCode() : Color.getHSBColor(0, 0, 0.1f + bc[0] * 0.01f).hashCode());

        UI.drawCenteredString(e.getMatrixStack(), fontRenderer, function, width / 12f * 4.5F - 3.5f + x, height / 10f * 3 + 22 + y, (0xffffff));

        if (MainWindow.handle != 0) {
            if (GLFW.glfwGetMouseButton(MainWindow.handle, GLFW.GLFW_MOUSE_BUTTON_1) == 0) {
                //OnClick();
                toggle = false;
            }

            if (GLFW.glfwGetMouseButton(MainWindow.handle, GLFW.GLFW_MOUSE_BUTTON_1) == 1 && !toggle && getCursorPosX(MainWindow.handle) > (widthc / 12f * 4 + 7 + xc) * 2 && getCursorPosX(MainWindow.handle) < (widthc / 12f * 5 - 7 + xc) * 2 && getCursorPosY(MainWindow.handle) > (heightc / 10f * 3 + 19 + yc) * 2 && getCursorPosY(MainWindow.handle) < (heightc / 10f * 3 + yc + 35) * 2) {
                Chtulhu.getModuleManager().getModule(modulec).toggle();
                SoundEvent breakst = SoundEvents.BLOCK_STONE_BREAK;
                Minecraft.getInstance().player.playSound(breakst, 100, 1);
                toggle = true;
            }
            

        }

    }

    float fadeiti(boolean hovered, float colorOffset){

        return 0.1f + colorOffset * 0.01f;
    }
    
}
 
Во-первых, тебе бы следовало прикрепить картинки, чтобы стало понятно, что за кнопки и как они должны выглядеть. Во-вторых, твой код... он ужасен. Твои кнопки не работают так, как надо, скорее всего из-за того, что bc статическая.
 
Во-первых, тебе бы следовало прикрепить картинки, чтобы стало понятно, что за кнопки и как они должны выглядеть. Во-вторых, твой код... он ужасен. Твои кнопки не работают так, как надо, скорее всего из-за того, что bc статическая.
если я даже сделаю ее не статичной то она будет постоянно обновляться, и переливания не будет впринципе, ща код перепишу и все скину
 
Крч ща немного рекоднул, вот как должно быть с обеими кнопками:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Как получается:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Проблема в переменной RGBAOffsets, а именно что она меняется в другом клоне класса кнопки, я хуй знает как это фиксить, ибо статичных переменных в методах в джава нет

Вот код самого класса кнопки:
Код:
Expand Collapse Copy
package chtulhu.gui;

import chtulhu.Chtulhu;
import chtulhu.events.render.RenderHUDEvent;
import chtulhu.utils.client.ClientUtils;
import chtulhu.utils.render.ColorUtility;
import chtulhu.utils.render.ColorUtils;
import chtulhu.utils.render.RenderUtils;
import net.minecraft.client.MainWindow;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import java.awt.*;
import java.nio.DoubleBuffer;

import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import org.lwjgl.BufferUtils;
import org.lwjgl.glfw.*;

public class ButtonUI {
    static boolean clickToggle = false;
    static boolean hoveredState = false;
    private static final float[] RGBAOffsets = new float[]{0, 0, 255, 0};
    SoundEvent stone_break = SoundEvents.BLOCK_STONE_BREAK;
    SoundEvent stone_place = SoundEvents.BLOCK_STONE_PLACE;
    Color fadet = Color.getHSBColor(0.666f, 0.46f, 1f);

    public ButtonUI(int height, int width, String function, String module, FontRenderer fontRenderer, int x, int y, RenderHUDEvent e){
        logicNRender(e, width, x, height, y, fontRenderer, function, module);
    }

    final void logicNRender(RenderHUDEvent e, int width, int x, int height, int y, FontRenderer fontRenderer, String function, String module) {

        //Hovered state var
        hoveredState = isHovered((width / 12f * 4 + 1 + x) * 2, (height / 10f * 3 + 22 + y) * 2, (width / 12f * 4 + 1 + x) * 2 + (width / 12f -8) * 2, (height / 10f * 3 + 22 + y) * 2 + (height / 10f -48) * 2);

        //Fade on hover
        if(hoveredState) {
            RGBAOffsets[3] += 5f;
            if (RGBAOffsets[3] > 255f) RGBAOffsets[3] = 255f;
        }else
            RGBAOffsets[3] -= 5f; if (RGBAOffsets[3] < 0) RGBAOffsets[3] = 0;

        //Render
        RenderUtils.drawGradientRound(width / 12f * 4 + x, height / 10f * 3 + 21 + y, width / 12f -6, height / 10f -46, 2,
                ColorUtility.TwoColorEffect(ColorUtility.rgba(138, 138, 255, RGBAOffsets[3]), ColorUtility.rgba(255, 255, 255, RGBAOffsets[3]), 4f, 1).hashCode(),
                ColorUtility.TwoColorEffect(ColorUtility.rgba(255, 255, 255, RGBAOffsets[3]), ColorUtility.rgba(138, 138, 255, RGBAOffsets[3]), 4f, 1).hashCode(),
                ColorUtility.TwoColorEffect(ColorUtility.rgba(255, 255, 255, RGBAOffsets[3]), ColorUtility.rgba(138, 138, 255, RGBAOffsets[3]), 4f, 1).hashCode(),
                ColorUtility.TwoColorEffect(ColorUtility.rgba(138, 138, 255, RGBAOffsets[3]), ColorUtility.rgba(255, 255, 255, RGBAOffsets[3]), 4f, 1).hashCode());
        RenderUtils.drawRound(width / 12f * 4 + 1 + x, height / 10f * 3 + 22 + y, width / 12f -8, height / 10f -48, 2, Chtulhu.getModuleManager().getModule(module).toggled ? fadet.hashCode() : new Color(255, 255, 255).hashCode());
        ChtulhuUI.drawCenteredString(e.getMatrixStack(), fontRenderer, function, width / 12f * 4.5F - 3.5f + x, height / 10f * 3 + 28.5f + y, new Color(0x343434).getRGB());

        //Func toggling
        if (MainWindow.handle != 0) {

            if (GLFW.glfwGetMouseButton(MainWindow.handle, GLFW.GLFW_MOUSE_BUTTON_1) == 0) clickToggle = false;

            if (GLFW.glfwGetMouseButton(MainWindow.handle, GLFW.GLFW_MOUSE_BUTTON_1) == 1 && !clickToggle && hoveredState) {

                if(Chtulhu.getModuleManager().getModule(module).toggled)
                    Minecraft.getInstance().player.playSound(stone_break, 100, 1);
                else
                    Minecraft.getInstance().player.playSound(stone_place, 100, 1);

                Chtulhu.getModuleManager().getModule(module).toggle();

                clickToggle = true;
            }

        }

    }

    public static double getCursorPosX(long windowID) {
        DoubleBuffer posX = BufferUtils.createDoubleBuffer(1);
        GLFW.glfwGetCursorPos(windowID, posX, null);
        return posX.get(0);
    }

    public static double getCursorPosY(long windowID) {
        DoubleBuffer posY = BufferUtils.createDoubleBuffer(1);
        GLFW.glfwGetCursorPos(windowID, null, posY);
        return posY.get(0);
    }

    boolean isHovered(float minX, float minY, float maxX, float maxY){
        return getCursorPosX(MainWindow.handle) >= minX && getCursorPosX(MainWindow.handle) <= maxX && getCursorPosY(MainWindow.handle) >= minY && getCursorPosY(MainWindow.handle) <= maxY;
    }

}
 
Проблема в переменной RGBAOffsets, а именно что она меняется в другом клоне класса кнопки, я хуй знает как это фиксить, ибо статичных переменных в методах в джава нет
private static final float[] RGBAOffsets = new float[]{0, 0, 255, 0};
???? а это тогда что?

зачем ты вытаскиваешь положение курсора и проверяешь клик напрямую? У тебя в классе Screen первое передается как параметры в render, а для второго есть отдельный метод
 
зачем ты вытаскиваешь положение курсора и проверяешь клик напрямую? У тебя в классе Screen первое передается как параметры в render, а для второго есть отдельный метод
так это тут при чем, меня мучает конкретно проблема с изменением альфы цвета
???? а это тогда что?
ты про что? это статичная переменная в классе, насколько я помню в с++ есть статичные переменные которые можно создавать прямо в методе, мб я ошибаюсь, но все же есть какие варианты фикса этой хуйни?
 

Вложения

  • 1694677075543.png
    1694677075543.png
    65.1 KB · Просмотры: 12
Назад
Сверху Снизу