Ваш код достаточно прост, чтобы не нуждаться в оптимизации на данном этапе.Как упоминает велосипед, вы рисуете изображение в переведенной позиции, очень похожее на blitting .
С точки зрения следов, вы можете использовать одну распространенную уловку - не полностью очистить экран, но нарисуйте прозрачный прямоугольник в качестве фона.Чем больше прозрачности, тем дольше трейлы.
Вот измененная версия вашего кода:
// planet object
Planet p1;
// planet texture
PImage mercury;
void setup() {
size(300, 300);
// draw image from center
imageMode(CENTER);
// clear to black one
background(0);
// remove strokes (we'll use rect() later)
noStroke();
// set the fill to black but with 9/255 transparency (~3.5% transparent)
fill(0,9);
// init texture
mercury = loadImage("mercury.png");
// init planet
p1 = new Planet(40, random(TWO_PI), 0.05);
}
void draw() {
// draw a transparent rectangle instead of completely clearing the screen
rect(0,0,width,height);
// render planet
translate(width / 2, height / 2);
p1.display1();
p1.orbit();
}
class Planet {
float radius;
float angle;
float distance;
float orbitSpeed;
Planet(float r, float d, float o) {
radius = r;
distance = d;
orbitSpeed = o;
angle = random(TWO_PI);
}
void orbit() {
angle = angle + orbitSpeed;
}
void display1() {
pushMatrix();
rotate(angle);
translate(distance, 0);
image(mercury, radius, radius, 10, 10);
popMatrix();
}
}
Это эффективный быстрый и полезный хак, так как вам не нужно сохранять предыдущиеПоложение и перерисовывать несколько раз, однако это имеет свои ограничения с точки зрения гибкости трасс.Надеемся, что настройка альфа-параметра fill()
даст вам желаемый эффект.
Позже, если вы рисуете много-много планет, все начинает работать медленнее, пик достигает VisualVM .Профилируйте ЦП и посмотрите методы, которые требуются больше всего времени для завершения и сосредоточиться на них.Не нужно оптимизировать все, только самые медленные звонки.Помните, что у Processing есть несколько средств визуализации: JAVA2D
- это значение по умолчанию, но есть также FX2D
и P2D
/ P3D
, и они будут вести себя по-разному.Я настоятельно рекомендую оптимизировать в последний момент (в противном случае код может быть менее гибким и читабельным, что замедлит разработку / итерацию).