0

我想让一组数组淡出,直到添加该组中的最后一个数组。例如,我使用append创建zoog[0]、zoog[1]、zoog[2],我希望这三个对象在zoog[2]创建之前不会淡出并等待一秒钟,与zoog[相同的情况3]、zoog[4]、zoog[5],这三个对象在zoog[5]创建之前不会淡出。但现在我能做的是让每个对象在创建后立即淡出。

Zoog[]zoog = new Zoog[1];
float count=0;
int xpos =0;
int ypos =0;
String message="haha";
int ntextsize = 20;
int nopacity =200;
int thistime = 0;
int thiscount = 0;
//Zoog zoog;

void setup() {
  size(400, 400);
    xpos = int(random(width/2-200, width/2+40));
  ypos = int(random(height/2, height/2-40));
  zoog[0] = new Zoog(xpos,ypos,message,nopacity);
}

void draw(){
  background(255,255,255);

  for(int i=0; i<zoog.length; i++){
//    if(millis()-thistime>4000){
//     zoog[i].disappear(); 
//    }
    zoog[i].jiggle();
    zoog[i].display();


  }
}


void mousePressed(){
   count = count + 1;
 // int thiscount = 0;
  if(count%3 ==0){
    xpos=int(random(30, width-30));
    ypos=int(random(10, height-10));

  }
  else{
    ypos = ypos+50;
//   thiscount = thiscount +1;
//   thistime = millis();
//  }
  }


 nopacity = int(random(100,255));
// text(message, xpos, ypos);
 Zoog b = new Zoog(xpos,ypos,message,nopacity);
 zoog =(Zoog[]) append(zoog,b);

}

Zoog类

class Zoog {
  int x;
  int y;
  String thatmessage;

  int opaci =0;

  Zoog(int xpo, int ypo, String thismessage, int opa) {
    x = xpo;
    y = ypo;
    thatmessage = thismessage;

    opaci = opa;
  }

  void jiggle() {

    x = x+int(random(-2, 2));
    y = y+int(random(-2, 2));
  }

  void display() {

    fill(0, opaci);
    text(thatmessage, x, y);
    print("x position is "+ x);
    print("y position is "+y);
  }

  void disappear() {
    for (int j=0; j<255; j++) {
      opaci = opaci -j;
    }
  }
}
4

1 回答 1

3

如果我理解正确,您想要制作 3 个zoog,然后开始淡出这三个直到它们消失。如果这是正确的,我有几种方法可以做到这一点。

首先,我不会使用数组,尤其是当您动态更新其中的数量时。如果你想这样做,我会使用arraylists这是javadocs参考。基本上你会初始化一个 Zoogs 的数组列表并将 zoog.add(new Zoog...) 放在鼠标按下。数组列表的好处是它们有许多可以帮助您操作它们的成员函数。例如,您可以在绘图函数中检查数组列表的大小而不是时间。一旦你超过 3 开始淡出前 3 直到他们死(使用 Zoog 成员函数说他们死了)。您可以在您的绘图循环中检查“isDead”成员函数,并在您的 for 循环中删除正确的死 Zoog。

这是一个粗略的实现,假设您在 Zoog 类中创建了一个 isDead 函数,它只返回不透明度是否大于 0:

void Draw()
{
   for (Zoog zoog : zoogs) //for each statement simplifying the code -       
                           //says for each Zoog in zoogs do
   {
      zoog.jiggle();
      zoog.display();
   }

   if(zoogs.size() >= 3) {    
      for(int i = 0; i < 3; i++) {
         zoogs.get(i).disappear();
      }
   }

   if (zoogs.get(0).isDead() && zoogs.get(1).isDead() && zoogs.get(2).isDead()) {
             zoogs.remove(2);
             zoogs.remove(1);
             zoogs.remove(0); 
   }
}

这绝不是一个完美的例子,但它展示了如何通过降低不透明度并检查它们是否已经死亡来一次移除 3 个zoog。如果您单击一百万次,那么每个三个链都需要一段时间才能死亡。

于 2013-05-15T04:20:19.377 回答