0

このグループの最後の配列が追加されるまで、配列のグループをフェードアウトさせたいです。たとえば、append を使用して、zoog[0]、zoog[1]、zoog[2] を作成します。これら 3 つのオブジェクトは、zoog[2] が作成されるまでフェードアウトしないようにして、zoog[ と同じ状況で 1 秒待ちます。 3]、zoog[4]、zoog[5]、これら 3 つのオブジェクトは、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);

}

ズーグクラス

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 を作成してから、それらの 3 つがなくなるまでフェードアウトし始めます。これが正しければ、これを行う方法がいくつかあります。

まず、特に配列内の金額を動的に更新する場合は、配列を使用しません。そうしたい場合は、arraylistsを使用します。これがjavadocsリファレンスです。基本的に、Zoogs の配列リストを初期化し、zoog.add(new Zoog...) を mousepressed に配置します。配列リストの良いところは、配列リストを操作するのに役立つ多数のメンバー関数があることです。たとえば、描画関数で時間の代わりに配列リストのサイズを確認できます。3 を超えたら、最初の 3 を死ぬまでフェードアウトさせます (Zoog メンバー関数を使用して、死んだと言います)。描画ループで「isDead」メンバー関数を確認し、for ループ内で正しいデッド Zoog を削除できます。

不透明度が 0 より大きいかどうかだけを返す isDead 関数を Zoog クラスに作成したと仮定した場合の、大まかな実装を次に示します。

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 を削除する方法を示しています。100 万回クリックしている場合、3 つのチェーンが消えるにはしばらく時間がかかります。

于 2013-05-15T04:20:19.377 に答える