所以我試圖設置這個東西,當盤旋時改變圖像。我已經設置了mouseListener來知道鼠標是否在我的圖像上。我有一個變量,其圖像位置存儲在它中,當圖像懸停時它會發生變化。當我的繪畫命令運行時,它繪製默認圖像,當我將它懸停在它上面時,它不會更改,因爲它不會再被繪製。我怎樣才能讓它在圖像位置發生變化時再次重新繪製它。順便說一句,mouseListener與圖像不同。如何在繪製函數中循環某些東西?
我的圖像:
private String settingsConfig = snake.settingsConfig;
settingsImage = new ImageIcon(getClass().getResource(settingsConfig));
settingsImage.paintIcon(this, g, 700, 23);
我的主類(畫方法是在其它類)
public class snake implements MouseListener{
public static int mouseX;
public static int mouseY;
public static String settingsConfig = "/assets/settings.png";
public static void main(String[] args) {
// JFrame
JFrame obj = new JFrame("Snake");
gameplay Gameplay = new gameplay();
obj.setBounds(10, 10, 905, 700);
obj.setBackground(Color.DARK_GRAY);
obj.setResizable(false);
obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
obj.add(Gameplay);
obj.setVisible(true);
obj.addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
if(mouseX > 699 && mouseX < 761 && mouseY > 22 + 25 && mouseY < 54 + 25) {
settingsConfig = "/assets/settingshover.png";
}
else {
settingsConfig = "/assets/settings.png";
}
}
});
}
非常小的片塗料(圖形克)(在不同的類):
public void paint (Graphics g) {
if(moves == 0) {
snakexlength[2] = 50;
snakexlength[1] = 75;
snakexlength[0] = 100;
snakeylength[2] = 100;
snakeylength[1] = 100;
snakeylength[0] = 100;
}
if(moves >= 1) {
playing = true;
}
// Draw title image border
g.setColor(Color.WHITE);
g.drawRect(24, 10, 851, 55);
// Draw the title image and settings
titleImage = new ImageIcon(getClass().getResource("/assets/snaketitle.jpg"));
titleImage.paintIcon(this, g, 25, 11);
settingsImage = new ImageIcon(getClass().getResource(settingsConfig));
settingsImage.paintIcon(this, g, 700, 23);
// Draw the border for gameplay
g.setColor(Color.WHITE);
g.drawRect(24, 74, 851, 577);
// Draw background for the gameplay
g.setColor(Color.BLACK);
g.fillRect(25, 75, 850, 575);
// Draw score
g.setColor(Color.WHITE);
g.setFont(new Font("arial", Font.PLAIN, 14));
g.drawString("Score: " + score, 780, 30);
// Draw high score
g.drawString("High Score: " + highScore, 780, 50);
}
你已經問過這個問題,並給出了重複以及許多類似問題的鏈接。你爲什麼再問一次?你爲什麼沒有顯示你從前面的鏈接中獲得了一些東西?你爲什麼不按照以前的要求發佈[mcve]? –
雖然這是不同的,但我在問我如何在繪畫函數中循環某些東西 –
你不循環,而且你沒有正確地思考邏輯。閱讀重複內容。您可以更改鼠標偵聽器中某個字段的狀態,然後使用該更改決定要繪製的內容。但是,如前所述,再次用JLabels交換ImageIcons會好得多。 –