我必須使用面向對象的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