2024年1月1日 星期一

Jia的互動技術日誌 Week13

 📋📋📋

這次上課我又有奇怪的問題了

在期中作品時我做好了莉露姆施法的打字遊戲

但我一直想讓最後變成動畫中的魔法特效卻不知道如何下手

老師做了示範告訴我可以做大小和透明度的調整

最後成功啦!

雖然沒有動畫上好看但至少還原了80%吧!

💾 程式碼存檔區
ArrayList<PVector>cloud = new ArrayList<PVector>(); //星雲
ArrayList<PVector> v = new ArrayList<PVector>(); //速度
ArrayList<PVector>cloud2 = new ArrayList<PVector>(); //星雲2
ArrayList<PVector> v2 = new ArrayList<PVector>(); //速度2
void setup(){
  size(1920,1080,P3D);
  addCloud(0);
  addCloud2(0);
}
void addCloud(float d){
  for(int i=0;i<6;i++){
    float a = i/6.0 * TWO_PI - d;
    cloud.add(new PVector( 960+5*cos(a),540+5*sin(a)));
    v.add(new PVector( 14*cos(a),14*sin(a)));
  }
}
void addCloud2(float d){
  for(int i=0;i<12;i++){
    float a = i/12.0 * TWO_PI - d;
    cloud2.add(new PVector( 960+5*cos(a),540+5*sin(a)));
    v2.add(new PVector( 14*cos(a),14*sin(a)));
  }
}
void draw(){
  background(255);
  if(frameCount%2==0) addCloud( +frameCount/60.0 );
  for(int i=cloud.size()-1;i>=0;i--){
    PVector p = cloud.get(i);
    fill(#C6FF00,30);
    noStroke();
    ellipse(p.x,p.y,p.z,p.z);
    p.x += v.get(i).x;
    p.y += v.get(i).y;
    p.z+= 3;
    if(p.x<0||p.x>1920||p.y<0||p.y>1080){
      cloud.remove(i);
      v.remove(i);
    }
  }
  if(frameCount%2==0) addCloud2( +frameCount/60.0 );
  for(int i=cloud2.size()-1;i>=0;i--){
    PVector p = cloud2.get(i);
    fill(#55D3FF,15);
    noStroke();
    ellipse(p.x,p.y,p.z,p.z);
    p.x += v2.get(i).x;
    p.y += v2.get(i).y;
    p.z+= 3;
    if(p.x<0||p.x>1920||p.y<0||p.y>1080){
      cloud2.remove(i);
      v2.remove(i);
    }
  }
}

為什麼這麼長呢,因為我新增了兩種顏色的星雲多用了一次資料結構

還不錯看哦

沒有留言:

張貼留言