我必须使用面向对象的Java编程来完成Agario游戏。到目前为止,我画了一个圆圈,并且能够使它跟随我的光标。然而,我有许多错误,例如光标接触到球后光标没有跟随光标,有时候,球快速移动,有时候会慢慢移动。使用鼠标光标移动对象 - Java
总的来说,我认为这是远远不够完美,并希望一些建议。我只需要遵循,我正在努力一点。下面的代码:
窗口类:
public class window extends JFrame implements Runnable {
Ball b = new Ball();
Thread t = new Thread(this);
public window() {
setSize(600, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(true);
setLocationRelativeTo(null);
setVisible(true);
t.start();
addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent evt) {
formMouseMoved(evt);
}
});
}
private void formMouseMoved(MouseEvent evt) {
b.setnewtarget(evt.getX(), evt.getY());
}
@Override
public void paint(Graphics g) {
super.paint(g); //To change body of generated methods, choose Tools | Templates.
b.drawCenteredCircle(g);
}
public static void main(String[] args) {
new window();
}
@Override
public void run() {
while (true) {
repaint();
}
}
}
Here's球类:
public class Ball implements Runnable {
Thread t = new Thread(this);
int x, y, r;
int targetx, targety;
public Ball() {
x = 300;
y = 300;
r = 35;
t.start();
}
public void drawCenteredCircle(Graphics g) {
g.fillOval(x, y, r, r);
g.drawLine(x, y, targetx, targety);
}
@Override
public void run() {
while (true)
int dx = Math.abs(targetx-x);
int dy = Math.abs(targety-x);
if (dx > dy) {
int oldx = x;
if (x > targetx)
x--;
else
x++;
y =((targety-y)/(targetx-x))*(x-oldx)+y;
} else {
int oldy = y;
if (y > targety)
y--;
else
y++;
x =((targetx-x)/(targety-y))*(y-oldy)+x;
}
try {
t.sleep(10);
} catch (InterruptedException ex) {
Logger.getLogger(Bola.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
void setnewtarget(int x, int y) {
targetx = x;
targety = y;
}
}
感谢:d
Stackoverflow更适合处理特定问题的问题。你的问题和征求建议,正如它的措辞,太宽泛了。 – k0pernikus
@ k0pernikus我已经在codereview.stackexchange.com上发布我的问题。感谢您花时间回复我的问题。关于我的问题,我只是想不出一个更好的代码来跟踪我的光标球:( –
@RicardoReis绝对不是关于代码评论的话题。我们不修复代码。 – Riker