单击画布放置对象

时间:2013-06-07 19:40:00

标签: arrays class object click processing

您好。我是SO的新手。我有一项任务,要求我允许用户点击画布并放置一个对象。仅允许用户将对象放置在画布上100次和任何位置。问题是我只能创建一个对象,它总是会到达左上角。

这是我的代码:

Food[] f;


void setup()
{
  size(400,400);
  background(206,172,26);

  f = new Food[100];
  for (int i = 0; i < 100; i++)
    f[i] = new Food();    
}

void draw()
{
  for(int i=0; i<f.length; i++)
    f[i].draw(); 
}

 class Food
 {
  color c;
  int xpos;
  int ypos;

    Food() 
  {
    c = color(0,255,0);
   xpos = mouseX;
   ypos = mouseY;    
 }
   void draw()
  {
    if (mousePressed == true)
   {
     fill(c);
     ellipse(xpos,ypos,10,10);
   }       
 }
}

我做错了什么?

2 个答案:

答案 0 :(得分:3)

您的Food()构造函数没有鼠标的xpos和ypos参数。你应该改为:

Food(int mousePosX, int mousePosY)
{
    xpos = mousePosX;
    ypos = mousePosY;
}

此外,只有在单击时才应创建Food对象。然后,您可以获取鼠标的位置并将其传递到Food对象构造函数中。您将需要一个计数器来跟踪您创建的食物对象的数量。

所有这一切,你应该自己做作业(除非你真的卡住)。你学得更好。

答案 1 :(得分:3)

我会选择一个ArrayList,因此您可以轻松添加对象:

ArrayList<Dummy> d = new ArrayList<Dummy>();

void setup(){
  size (400, 400);
  smooth();

}

void draw(){
  background(0);
  for(Dummy dd:d){
    dd.display();
  }
}

void mouseReleased(){
  if(d.size() < 100)
  d.add(new Dummy(mouseX, mouseY));

  println(d.size());
}

class Dummy{
  int x, y;
  Dummy(int _x, int _y){
    x = _x;
    y = _y;
  }

  void display(){
   ellipse(x,y,10,10);
  }


}