gpt4 book ai didi

java - Mouselister 无法与 if 语句一起使用

转载 作者:行者123 更新时间:2023-12-02 11:01:35 25 4
gpt4 key购买 nike

我在 2d 程序游戏中遇到了最后一个错误,其中玩家单击随机出现的对象(本质上是敲打地鼠),然后显示玩家捕获该生物的次数。

一切正常,除了在按下目标时试图增加玩家的分数时。如果我关闭 if 语句,则每次按下鼠标时 MouseListener 都会增加 +1。看来错误出在我的“if”语句中。当使用“.equals”时,编译器最初建议我该语句不太可能,因此我研究了数据类型并将 if 语句更改为使用“==”而不是“.equals”。

package activity1;

import javax.swing.*;
import java.awt.*;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
import java.util.Random;

public class CreaturePanel extends JPanel {

Random CreatureGenerator = new Random();

private final int WINDOW_WIDTH = 1000;
private final int WINDOW_LENGTH = 1000;
private Point point = null;
private int creaturecounter;
private final int creatureSize = 20;
private int creatureXPosition = 500;
private int creatureYPosition = 500;
private JLabel CreatureLabel;
private JTextField CreatureText;
private Timer timer;

public CreaturePanel () {
CreatureLabel = new JLabel("Number of times Creature Caught: ");
CreatureText = new JTextField(10);
add(CreatureLabel);
add(CreatureText);
addMouseListener(new CreatureMouseListener());
timer = new Timer(5000, new CreatureListener());
this.setFocusable(true);
timer.start();
}

public void paintComponent(Graphics page)
{
super.paintComponent(page);
page.setColor(Color.red);
page.fillOval(getCreatureXPosition(), getCreatureYPosition(), creatureSize, creatureSize);
}

package activity1;

import javax.swing.JFrame;

public class CatchTheCreature {

public static void main(String[] args) {
JFrame frame = new JFrame("Catch the Creature!");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1000, 1000);

CreaturePanel PanelFinal = new CreaturePanel();
frame.getContentPane().add(PanelFinal);
frame.pack();
frame.setVisible(true);
}
}

public int getCreatureYPosition() {
return creatureYPosition;
}

public void setCreatureYPosition(int creatureYPosition) {
this.creatureYPosition = creatureYPosition;
}

public int getCreatureXPosition() {
return creatureXPosition;
}

public void setCreatureXPosition(int creatureXPosition) {
this.creatureXPosition = creatureXPosition;
}

private class CreatureMouseListener implements MouseListener {

public void mousePressed (MouseEvent event)
{
if(getCreatureXPosition() == event.getX() && getCreatureYPosition() == event.getY())
{
creaturecounter+=1;
CreatureText.setText(Integer.toString(creaturecounter));
repaint();
}
}

public void mouseClicked(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mouseReleased(MouseEvent arg0) {}
}
private class CreatureListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
setCreatureXPosition(CreatureGenerator.nextInt(WINDOW_WIDTH));
setCreatureYPosition(CreatureGenerator.nextInt(WINDOW_LENGTH));
repaint();
}

}
}

任何可以帮助我指明正确方向的建议。对于马虎的代码提前表示歉意。谢谢。

最佳答案

您正在检查该生物的确切位置 - 左上角。

    if (getCreatureXPosition() == event.getX() &&
getCreatureYPosition() == event.getY())

因此,用户必须单击该生物左上角的确切像素。尝试类似的方法来计算生物大小(以像素为单位)..

    if (event.getX() >= getCreatureXPosition() &&
event.getX() < getCreatureXPosition() + creatureSize &&
event.getY() >= getCreatureYPosition() &&
event.getY() < getCreatureYPosition() + creatureSize)

这将为您提供一个可以在其中单击的简单框。您还可以尝试检测您点击了生物的实际像素而不是背景的位置。

关于java - Mouselister 无法与 if 语句一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51296585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com