Я хочу добавить функцию, чтобы при перемещении мыши по кнопке она добавила тень. В настоящее время я просто пытаюсь заставить механику работать. У меня есть игровой цикл вызова метода обновления, который я знаю, работает, но здесь это все равноJava-графика не перекрашивается
public void updateManager(double delta){
mhandler.updateCoordinates();
if(mhandler.getX() >= 144 && mhandler.getX() <= 444 && mhandler.getY() >= 784 && mhandler.getY() <= 980){
oversp = true;
}else{
oversp = false;
}
}
mhandler является то, что я назвал свой MouseHandler класса. тогда у меня есть мой метод визуализации
public void render(){
repaint();
}
, а затем мой метод рисования
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
if(oversp){
System.out.println("Is over button");
g2d.setColor(Color.RED);
g2d.fillRect(144, 784, 300, 169);
}else{
System.out.println("Not over button");
g2d.setColor(Color.BLACK);
g2d.fillRect(144, 784, 300, 169);
}
}
Если когда-нибудь я запустить программу, она только печатает не более кнопки в два раза, даже если я буду постоянно призывая оказывать() в мой игровой цикл. Я действительно не знаю, почему это не перекрашивает. любая помощь очень приветствуется!
Это, как я могу определить свои координаты мыши
private int x,y;
public MouseHandler(){
x = 0;
y = 0;
}
public void updateCoordinates(){
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
x = (int) b.getX();
y = (int) b.getY();
}
public int getX(){
return x;
}
public int getY(){
return y;
}
код цикла игры
public static void MenuLoop() {
long lastLoopTime = System.nanoTime();
final int TARGET_FPS = 60;
final long OPTIMAL_TIME = 1000000000/TARGET_FPS;
long lastFpsTime = 0;
int fps = 0;
while (isrunning) {
long now = System.nanoTime();
long updateLength = now - lastLoopTime;
lastLoopTime = now;
double delta = updateLength/((double) OPTIMAL_TIME);
lastFpsTime += updateLength;
fps++;
if (lastFpsTime >= 1000000000) {
System.out.println("(FPS: " + fps + ")");
lastFpsTime = 0;
fps = 0;
}
menu.render();
menu.updateManager(delta);
try {
Thread.sleep((lastLoopTime - System.nanoTime() + OPTIMAL_TIME)/1000000);
} catch (Exception e) {
}
}
}public static void MenuLoop() {
long lastLoopTime = System.nanoTime();
final int TARGET_FPS = 60;
final long OPTIMAL_TIME = 1000000000/TARGET_FPS;
long lastFpsTime = 0;
int fps = 0;
while (isrunning) {
long now = System.nanoTime();
long updateLength = now - lastLoopTime;
lastLoopTime = now;
double delta = updateLength/((double) OPTIMAL_TIME);
lastFpsTime += updateLength;
fps++;
if (lastFpsTime >= 1000000000) {
System.out.println("(FPS: " + fps + ")");
lastFpsTime = 0;
fps = 0;
}
menu.render();
menu.updateManager(delta);
try {
Thread.sleep((lastLoopTime - System.nanoTime() + OPTIMAL_TIME)/1000000);
} catch (Exception e) {
}
}
}
Может быть, ваш игровой цикл блокирует поток gui? –
Должна быть проблема с тем, как вы обнаруживаете, находится ли мышь внутри или снаружи кнопки, но поскольку у нас нет кода для этого, на данный момент невозможно устранить неполадки. Кроме того, было бы гораздо лучше сравнить вашу позицию мыши с координатами, возвращаемыми самой кнопкой, вместо использования абсолютных значений для X и Y. – CodeBlind
теперь я добавил код – tyty5949