В опубликованном вами коде эти строки запускаются только один раз:
int bulletWidth = SIZE_X / somenumber;
int bulletHeight = SIZE_Y / somenumber;
Эти строки будут запускаться каждый раз, когда вы создаете новый экземпляр класса Bullet
:
Bullet(int _x, int _y, int _w, int _h)
{
x = _x;
y = _y;
w = _w;
h = _h;
}
Эти строки также будут запускаться каждый раз, когда вы создаете новый экземпляр класса Bullet
:
class Bullet
{
int x;
int y = player.y;
int w = SIZE_X / 150;
int h = SIZE_Y / 50;
Значения не пересчитываются при каждом их использовании.
Обратите внимание, что выможете проверить это самостоятельно, используя функции. Попробуйте что-то вроде этого:
int sketchX = getSketchX();
void setup() {
size(100, 100);
for(int i = 0; i < 10; i++) {
Bullet b = new Bullet();
}
}
int getSketchX() {
println("getSketchX");
return 42;
}
class Bullet {
int classX = getClassX();
public Bullet() {
int constructorX = getConstructorX();
}
int getClassX() {
println("getClassX");
return 42;
}
int getConstructorX(){
println("getConstructorX");
return 42;
}
}
Сделав шаг назад, я бы сказал, что вы, вероятно, слишком беспокоитесь о производительности. Если вы еще не сделали какой-либо тест, вы не должны упускать из виду, чтобы ваш компьютер выполнял как можно меньше вычислений. Выполнение некоторой базовой математики для каждой пули не вызовет никаких проблем. (Сравните это с тем, сколько ваш компьютер должен сделать, чтобы нарисовать экран, и вы поймете, что я имею в виду.)
Есть известная цитата: «Преждевременная оптимизация - корень всего зла. « Это означает, что вам не нужно слишком беспокоиться об оптимизации кода, если вы еще не измерили код.
Если вы измеряете код и обнаруживаете, что конструктор Bullet
на самом деле это займет слишком много времени, тогда вы можете пойти дальше и беспокоиться об этом. Но вы обнаружите, что ваша программа тратит гораздо больше времени на рисование, чем деление двух чисел.
Чтобы ответить на ваш вопрос: лучшее время для установки длины на основе разрешения - везде, где наиболее читаемо.
Наиболее читаемое место зависит от того, как различные части вашего кода сочетаются в вашем мозгу. И, как и многие другие вещи в кодировании, это компромисс: размещение инициализации в верхней части эскиза может иметь смысл, если у вас много констант, которые не изменятся, но размещение инициализации внутри конструктора Bullet
может быть более читабельным, еслиВы можете изменить размер каждой пули в будущем. Нет единственного «лучшего» места для размещения вашего кода.