2011-11-17 63 views
0

我想在java中製作一個簡單的線條畫程序,我將每個像素存儲在一個數組的屏幕上進行繪製。當用戶拖動鼠標時,每個像素都設置爲1,然後我嘗試遍歷並在每對點之間劃一條線。然而,它沒有正確繪製,有人可以在這裏看到問題嗎?簡單的線條圖

public void mouseDragged(MouseEvent m) { 
    screen[m.getX()][m.getY()] = 1; 
    drawOffscreen(); 
} 

public void mouseReleased(MouseEvent e) { 
    end[e.getX()][e.getY()] = true;  
} 


int prex = -1; 
int prey = -1; 
public void paint(Graphics g) { 
    g.drawImage(offscreen, 0, 0, null);  
    for (int x = 0; x < screen.length; x++){ 
     for (int y = 0; y < screen[0].length; y++){ 
      if(screen[x][y] == 1){ 
       if (prex != -1 && prey != -1 && !end[x][y]){ 
        g.drawLine(prex, prey, x, y);            
       } 
       prex = x; 
       prey = y; 
      } 
     } 
    } 

} 
+0

1)爲了更好地幫助越早,張貼[SSCCE](http://sscce.org/)。 2)*「它沒有正確繪製」*什麼是「正確的」?你在看什麼?你期望*看到什麼? –

+2

*'prey' *變量名稱的有趣選擇。 「捕食者」在哪裏申報? –

+0

獵物= y的前兆,在上面清楚地定義。我期待它在拖動的點之間畫線,但它正在繪製「任意」的連接點。 – Neutralise

回答

2

(我認爲這是一個家庭作業嗎?如果是的話,請將其標記爲功課)

我敢打賭,沒有人會清楚的知道什麼ü由「未正確繪製」的意思。無論如何,我可以看到的一個問題。

我敢打賭,你只存儲1行。然而,你存儲和繪製的方式是有問題的。

您通過在「虛擬屏幕」上標記座標來存儲鼠標「通過」的座標。但是,當您在屏幕上繪製時,您不遵循鼠標傳遞的順序。相反,你是按照從上到下,從左到右的順序畫線,這只是給你一個混亂。

您可能會考慮存儲一個座標列表,並且當您繪製時,根據座標進行繪製。

僞代碼:

class Coordinate { // there are some class in Java that already does that, 
        //leave it to you to find out :) 
    int x; 
    int y; 
} 

List<Coordinate> theOnlyLine=....; 
public void mouseDragged(MouseEvent m) { 
    theOnlyLine.add(new Coordinate(m.getX(), m.getY()); 
} 

public void mouseReleased(MouseEvent e) { 
    theOnlyLine.add(new Coordinate(m.getX(), m.getY()); 
} 

public void paint(Graphics g) { 

    int prevX = -1; 
    int prevY = -1; 
    for (Coordinate coordinate : theOnlyLine) { 
    if (prevX > 0 && prevY > 0) { 
     g.drawLine(prevX, prevY, coordinate.getX(), coordinate.getY()); 
    } 
    prevX = coordinate.getX(); 
    prevY = coordinate.getY(); 
    } 
} 
+0

是的,我也發現了這一點。我希望能做到'虛擬屏幕'的方式,因爲這使得洪水填充更容易。這是對考試的修訂,而不是作業。謝謝。 – Neutralise

+0

我沒有做太多的GUI開發,但是如果你正在編寫這個虛擬屏幕,我會建議你看看雙緩衝,因爲它是使用圖形上下文的「虛擬屏幕」。我認爲這不是比2維陣列更難使用。 –