我正在尝试编写一些代码,当鼠标靠近它时会导致2d球移动,但它无法正常工作。 (我没有编程很长时间..) 这是当前的代码:
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import acm.graphics.*;
import acm.program.*;
@SuppressWarnings("serial")
public class MoveAway extends GraphicsProgram implements MouseMotionListener {
static int width;
static int height;
int x = 100;
int y = 100;
GOval runaway;
public void main(){
System.out.println("Movement Detected");
System.out.println("Stop Moving!");
width = getSize().width;
height = getSize().height;
addMouseMotionListener(this);
}
public void run() {
System.out.println(width);
System.out.println(height);
GOval runaway = new GOval(50, 50);
runaway.setColor(Color.blue);
runaway.setFilled(true);
add(runaway);
runaway.setLocation(x, y);
}
public void mouseMoved(MouseEvent e) {
System.out.println("test");
if(x - e.getX() > -50 && y - e.getY() > -50) {
runaway.setLocation(x - 1, y - 1);
y = y - 1;
x = x - 1;
System.out.println("Close!");
}
if(x - e.getX() < 50 && y - e.getY() < 50){
runaway.setLocation(x + 1, y + 1);
y = y +1;
x = x - 1;
System.out.println("Close!");
}
}
}
其中一些(或大多数)可能是超级初学者的东西,这是非常明显的,但我不知道该怎么做。
答案 0 :(得分:2)
你有很多事情要做的不太正确,但我会尽力引导你走上正确的道路。
首先,您需要对MVC进行一些阅读。这是一个将GUI与逻辑分开的设计原则,这将使您的代码更易于维护。您将需要创建一个不同的类来处理MouseListener。
这显然应该是你的主类,所以你需要让你的主方法有以下格式
public static void main(String[] args)
你的一些方法调用毫无意义。例如,行:
width = getSize().width;
height = getSize().height;
getSize()永远不会在您的程序中定义(尽管它应该是。请参阅this关于“getters and setters”的变量),即使它是,“。width”和“.height”是什么“ 应该做的?您需要重新考虑如何设置这些变量。
addMouseMotionListener()也从未定义,因此尝试在main方法中调用它不会做任何事情。
你的run()方法永远不会在main中调用,因此其中的任何代码都可能不存在。
我也不确定你用mouseMoved()做了什么,也从未在你的代码中调用过,所以我无法真正帮助你解决逻辑问题。
我希望这会有所帮助!祝好运。 :)
答案 1 :(得分:1)
您需要通过main方法运行程序。现在看起来你有一些你根本不使用的方法(运行)