2012-02-09 14 views

答えて

4

効率的ではありませんが、私はそれを行うための1つの方法はArrayListの古い位置を維持することでしょうか?各フレームの現在の位置をプッシュし、最も新しいものを削除する限り、各ポイント間に線を引くことができます。それが役に立てば幸い!

PVector circlePosition; 
ArrayList<PVector> circleTrail; 
int trailSize = 10; 

void setup() { 
    size(500, 500); 
    circlePosition = new PVector(width*0.5, width*0.5); 
    circleTrail = new ArrayList<PVector>(); 
} 

void draw() { 
    background(255); 
    int trailLength; 

    circlePosition = new PVector(mouseX, mouseY); 
    circleTrail.add(circlePosition); 

    trailLength = circleTrail.size() - 2; 
    println(trailLength); 

    for (int i = 0; i < trailLength; i++) { 
    PVector currentTrail = circleTrail.get(i); 
    PVector previousTrail = circleTrail.get(i + 1); 

    stroke(0, 255*i/trailLength); 
    line(
     currentTrail.x, currentTrail.y, 
     previousTrail.x, previousTrail.y 
    ); 
    } 

    ellipse(circlePosition.x, circlePosition.y, 10, 10); 

    if (trailLength >= trailSize) { 
    circleTrail.remove(0); 
    } 

} 
4

私はまたは私の方法の効率化に話すことができないが、私はそれをやった方法は(も低い値に設定してあなたの全体のスケッチ上のたびに矩形を描くことです25程度のように)。これにより、以前のdraw()サイクルのオブジェクトが「色あせ」して表示されます。例:

int i = 0; 

void setup(){ 
    size(500,500); 
    smooth(); 
    noStroke(); 
    background(255); 
} 

void draw(){ 
    fill(255,25); 
    rect(0,0,width,height); 
    fill(0); 
    ellipse(width/2 + i,height/2 + i,50,50); 
    delay(100); 
    i+=10; 
} 
関連する問題