0
我有這個奇怪的例子,橢圓網格全部互相摺疊併產生一種爆炸性碰撞,這是一種有趣的效果,但不是我想要的。我真的只是希望小橢圓的平滑過渡越來越大,因爲它們靠近屏幕的中心,然後慢慢過渡而不是創建「爆炸」。我不知道爲什麼會出現這種情況。有什麼建議麼?處理窗口在橢圓碰撞時變成白色(短暫)
我試圖截圖,但捕獲爆炸相當困難。基本上,如果你能想象所有8個橢圓進入一箇中心點,然後迅速增長,從而使窗口的其餘部分成爲白色。
ArrayList<RotatingEllipse> ellipses = new ArrayList<RotatingEllipse>();
float updateSize = 1;
float minSize = 1;
float maxSize = 10;
float sizeSpeed = 0.015;
void setup() {
size(500, 500);
noStroke();
smooth();
ellipses.add(new RotatingEllipse(width*.25, height*.25));
ellipses.add(new RotatingEllipse(width*.75, height*.25));
ellipses.add(new RotatingEllipse(width*.75, height*.75));
ellipses.add(new RotatingEllipse(width*.25, height*.75));
ellipses.add(new RotatingEllipse(width/2, height*.25));
ellipses.add(new RotatingEllipse(width/2, height*.75));
ellipses.add(new RotatingEllipse(width*.25, height/2));
ellipses.add(new RotatingEllipse(width*.75, height/2));
}
void draw() {
background(#202020);
for (RotatingEllipse e : ellipses) {
e.stepAndDraw();
updateSize = map(sin(frameCount * sizeSpeed), -1.0, 1.0, minSize, maxSize);
}
}
class RotatingEllipse {
float rotateAroundX;
float rotateAroundY;
float distanceFromRotatingPoint;
float angle;
public RotatingEllipse(float startX, float startY) {
rotateAroundX = (width/2 + startX)/2;
rotateAroundY = (height/2 + startY)/2;
distanceFromRotatingPoint = dist(startX, startY, rotateAroundX, rotateAroundY);
angle = atan2(startY-height/2, startX-width/2);
}
public void stepAndDraw() {
angle += PI/128;
float x = rotateAroundX + cos(angle)*distanceFromRotatingPoint;
float y = rotateAroundY + sin(angle)*distanceFromRotatingPoint;
float distance = dist(x, y, width/2, height/2);
float diameter = 50*(200-distance)/500;
float m = map (updateSize, 0, distance, 1, diameter);
ellipse(x, y, m, m);
}
}
最初,我沒有updateSize,並且相對於每個橢圓自己的中心點的距離增加了大小。但是,這會導致屏幕中心每個對角線橢圓上的大小發生變化。因此,我回想起依靠屏幕中心創建橢圓大小的原始代碼。我會重新考慮代碼。謝謝 –