2016-09-20 4 views
1

背景をさまざまな色にフェードインさせようとしています。私はバックグラウンドを使うのではなく、rectを描くことにしましたが、背景が描画されていないので、私は自分のパーティクルを追跡しています。これを修正する方法に関する提案?将来的には色を変更して処理中の背景を変更して粒子に影響を与える

// main tab 
ArrayList<ParticleSystem> systems; 

PVector windRight = new PVector(0.1,0); 
PVector sortaSpeed = new PVector(-0.1,0); 
PVector gravity = new PVector(0,0.05); 

boolean wR = false; 
boolean sP = false; 
boolean cS = false; 

int limit = 8; 

int alpha = 10; 
color[] colorArray = {color(0,0,0,alpha),color(16, 37, 43,alpha),color(51, 10, 10,alpha),color(126, 255, 0,alpha)}; 
int currentColor; 
int nextColor; 

boolean change = false; 

void setup() { 
    size(640,480); 
    systems = new ArrayList<ParticleSystem>(); 
    smooth(); 
    noStroke(); 
    currentColor = 0; 
    for(int i = 0; i < limit; i++){ 
    systems.add(new ParticleSystem(random(100,200),10,new PVector(random(100,500),-5))); //random(480) 
    } 
    background(0); 
} 

void draw() { 
    //rect(0, 0, 2000, 2000); 
    fill(colorArray[currentColor]); 
    rect(0, 0, width*2, height*2); 
    //background(colorArray[currentColor]); 
    if(change){ 
     currentColor = nextColor; 
     change = false; 

    } 

    if(!systems.isEmpty()){ 
     for (int i =0; i < systems.size(); i++){ 
     ParticleSystem ps = systems.get(i); 
     ps.applyForce(gravity); 
     ps.run(); 
     if(wR){ 
      ps.applyForce(windRight); 
     } 
     if(sP){ 
      ps.applyForce(sortaSpeed); 
     } 
     } 
    } 
} 

void keyPressed() { 

    if(key == 'w'){ 
    wR = true; 
    print("w"); 
    } 
    if(key == 'a'){ 
    print('a'); 
    sP = true; 
    } 
} 

void keyReleased(){ 
    if(key == 'w'){ 
    wR = false; 
    } else if(key == 'a'){ 
    sP = false; 
    } else if(key == 's'){ 
    if(key == 's'){ 
     change = true; 
     println("currentColor: "+currentColor); 
     int newColor = currentColor; 
     while (newColor == currentColor) 
     newColor=(int) random(colorArray.length); 
     nextColor = newColor; 
    } 


    } // end of cS 
} 

答えて

0

MCVEを投稿してみてください。コンパイルエラーが含まれているため、今はコードを実行できません。とにかくスケッチ全体を見る必要はありませんが、ポイントを取得する小さな例です。

しかし、背景にアルファ値を使用しようとしているために問題が発生しています。これは、background()関数では機能しません。この関数はアルファ値を無視し、rect()関数では機能しないため、古いフレームを消去しないため透明な四角形で表示されます。

代わりに、lerpColor()関数を使用して、時間の経過とともにある色から別の色への遷移を計算することができます。ここで

は、ランダムな色の間の遷移例を示します

color fromColor = getRandomColor(); 
color toColor = getRandomColor(); 

float currentLerpValue = 0; 
float lerpStep = .01; 

void draw() { 

    color currentColor = lerpColor(fromColor, toColor, currentLerpValue); 

    currentLerpValue += lerpStep; 
    if (currentLerpValue >= 1) { 
    fromColor = currentColor; 
    toColor= getRandomColor(); 
    currentLerpValue = 0; 
    } 

    background(currentColor); 
} 

color getRandomColor() { 
    return color(random(255), random(255), random(255)); 
} 
関連する問題