2016-05-17 43 views
0

我想用鼠標左鍵單擊來創建對象,並通過右鍵單擊它們。我可以通過查看舊的問題來解決我以前關於添加,存儲和刪除對象的問題,但我希望對象恰好出現在用戶點擊的位置,而我找不到用正確座標顯示每個對象的解決方案。目前,第一個對象顯示在(0,0),我甚至無法看到其餘的對象,但是我可以從控制檯看到對象已成功創建。這裏是我的代碼:處理3 - 顯示ArrayList中的對象

ArrayList dots; 

void setup() { 
size(500, 500); 
background(255); 
dots = new ArrayList(); 
colorMode(HSB); 
strokeWeight(2); 
} 

void mousePressed() { 
if(mouseButton==LEFT) { 
    dots.add(new Dot(mouseX, mouseY)); 
    Dot temp1 = (Dot)dots.get(dots.size()-1); 
    temp1.create(dotX, dotY); 
} 
if(mouseButton==RIGHT && dots.size()>0) { 
    dots.remove(dots.size()-1); 
} 
} 

void draw() { 
    background(255); 
    for (int i = 0; i < dots.size(); i++) { 
    Dot temp2 = (Dot)dots.get(i); 
    temp2.display(coord[0], coord[1]); 
    } 
    println("Object count: " + dots.size()); 
} 

int dotX; 
int dotY; 
int[] coord = {dotX, dotY}; 

class Dot{ 
    int id; 
    Dot(int dotX, int dotY) { 
    id = dots.size(); 
    dotX = mouseX; 
    dotY = mouseY; 
    } 

    int[] create(int dotX, int dotY) { 
    int[] coord = {dotX, dotY}; 
    display(dotX, dotY); 
    return coord; 
    } 

    void display(int dotX, int dotY) { 
    float c1 = map(dotX, 0, width, 0, 255); 
    noStroke(); 
    fill(c1, 255, 255); 
    ellipse(dotX, dotY, 20, 20); 
    } 
} 

我做創建()返回一個數組,否則好像我不能引用到每個對象的座標同時顯示,但我認爲主要的問題是什麼。建議?

回答

0

您的主要問題是由級別爲dotX,dotYcoord變量造成的。這意味着您的所有Dot實例共享相同的位置。擺脫這些變數。

取而代之,您需要使用變量裏面的Dot,那樣每個Dot都可以有自己的位置。

然後你有一堆額外的垃圾,你需要擺脫。您的create()函數似乎沒有任何用處,並且您的display()函數不需要使用任何參數,因爲您應該在Dot類中使用變量,而您應該使用該變量。

全部放在一起,它看起來像這樣:

ArrayList<Dot> dots = new ArrayList<Dot>(); 

void setup() { 
size(500, 500); 
background(255); 
} 

void mousePressed() { 
if(mouseButton==LEFT) { 
    dots.add(new Dot(mouseX, mouseY)); 

} 
if(mouseButton==RIGHT && dots.size()>0) { 
    dots.remove(dots.size()-1); 
} 
} 

void draw() { 
    background(255); 
    for(Dot dot : dots){ 
    dot.display(); 
    } 
} 



class Dot{ 

    float dotX; 
    float dotY; 

    int id; 
    Dot(int dotX, int dotY) { 
    id = dots.size(); 
    this.dotX = dotX; 
    this.dotY = dotY; 
    } 

    void display() { 
    float c1 = map(dotX, 0, width, 0, 255); 
    noStroke(); 
    fill(c1, 255, 255); 
    ellipse(dotX, dotY, 20, 20); 
    } 
} 

還要注意,我說的仿製藥你ArrayList

取而代之的是:

ArrayList dots = new ArrayList(); 

這樣做:

的ArrayList點=新的ArrayList();

<Dot><Dot>部分告訴處理您的ArrayList將容納什麼類型的對象,因此您不再需要投射,並且可以使用增強型for循環。

+0

謝謝!也感謝您指出我在開始時犯的愚蠢錯誤。 – ezekeel