java - 难以捉摸的球类游戏项目

标签 java swing animation paint mouselistener

因此,我们类正在制作一个难以捉摸的球项目。基本上,这是一个游戏,鼠标必须追逐圆圈,直到用户得到它。然而在我的代码中,鼠标监听器正在识别鼠标移动,但它根本不与圆圈交互。球不移动的时期。我不知道这是我的逻辑还是我使用了错误的方法还是什么。

package lab10;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.Random;

import javax.swing.JFrame;



public class Lab10 extends JFrame implements MouseMotionListener{
int x = 325;
int y = 325;
int rX;
int rY;

public Lab10() {
    super("The Elusive Circle");
    addMouseMotionListener(this);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(750,750);
    setVisible(true);

}


public void paint(Graphics g) {
    super.paint(g);
    g.drawOval(getX(),getY(),80,80);
    g.setColor(Color.MAGENTA);
    g.fillOval(getX(),getY(),80,80);



}

public static void main (String args[]) {
    Lab10 circle = new Lab10();
    System.out.println("MY HEAD!");
}
public void mouseDragged (MouseEvent e) {

    System.out.println("bacon pancakes");

}
public void mouseMoved (MouseEvent e) {
    setCircle(e);
    System.out.println("my head!!");
}



public void setCircle(MouseEvent m) {
    int getx = m.getX();
    int gety = m.getY();
    Random r = new Random();
    int rX = r.nextInt(700 - 51) + 51;
    int rY = r.nextInt(700 - 51) + 51;
    boolean getxInBounds = (getx == (rX+80));
    boolean getyInBounds = (gety == (rY+80));
    boolean getxInBounds2 = (getx == (rX-80));
    boolean getyInBounds2 = (gety == (rY-89));
    setX(rX);
    setY(rY);
    if(getxInBounds||getxInBounds2||getyInBounds||getyInBounds2){
                repaint();
                }

}
public void mouseClicked (MouseEvent e) {
    System.out.println("Idk");
}
private void setX(int a) {
    int x = a;
}
private void setY(int b) {
    int y = b; 
}
public int getX(){
    return x;
}
public int getY() {
    return y;
}

最佳答案

您在绘制方法内的 JFrame 上调用 getX()getY() ,并且由于这些永远不会改变,球永远不会移动。为您的类提供 MouseMotionListener 设置的 xPosition 和 yPosition 字段,并在您的绘制方法中使用这些字段。

编辑:您已经获得了字段。设置 rX 和 rY 字段。请注意,不要调用 setX(...)setY(...) 因为它们设置的是组件的位置,而不是圆的位置,并且不会为您的 GUI 类提供 getX()getY() 方法,因为这些方法将覆盖组件的方法,从而导致严重的副作用。

顺便说一句,您最好在 JFrame 中显示的 JPanel 的 PaintComponent 方法内部进行绘制。

关于java - 难以捉摸的球类游戏项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24917350/

相关文章:

java JMenuBar 不可见?为什么?

swift - SwiftUI 中的动画状态变化

ios - 自定义单元格内的 UITableViewCell 按钮动画,我得到错误的单元格索引路径以显示动画

jquery - 使用动画循环遍历数组

java - 函数式编程 - 不变性昂贵吗?

Java JList 滚动到所选项目

java - 如何使用 Java 标准 API 从字符串中获取特定数据?

java - JPanel上绘制对象的持久化

java - 无法覆盖或禁用 spring boot 实例化的 Filter,导致过滤器链中出现重复条目

java - 我的java方法代码有什么问题? - 堆栈