Я делаю 2D-игру с обработкой, когда добавляю свет, fps падает до 20 ~ с 30, если я добавлю еще один, он упадет еще больше. Но обработка использует только% 15 процессора, независимо от того, как я могу увеличить его, поэтому я могу видеть 30 кадров в секунду?Обработка процессора Ограничение
void castLight(int mapNum){
color c = color(0, 0, 0);
if(mapNum == 1){
for(int x = 0; x < width; x++){
for(int y = 0; y < height; y++){
if(improvedLights){
putShadow = improvedLights();//not working
} else {
putShadow = true;
}
for(int i = 0; i < torchHolder1.size(); i++){
if(dist(x, y, torchHolderX1.get(i), torchHolderY1.get(i)) <= maxDist){
if(improvedLights){
putShadow = improvedLights();
} else {
putShadow = false;
}
}
}
if(putShadow){
int loc = x+y*width;
float r,g,b;
r = red (pixels[loc]);
g = green (pixels[loc]);
b = blue (pixels[loc]);
r -= 100;
g -= 100;
b -= 100;
r = constrain(r, 0, 255);
g = constrain(g, 0, 255);
b = constrain(b, 0, 255);
if(torchAnimCounter % 31 < 16){
c = color(r, g, b);
} else {
c = color(r+10, g+10, b+10);
}
pixels[y*width + x] = c;
}
}
}
for(int i = 0; i < torchHolderX1.size(); i++){
for(int x = torchHolderX1.get(i) - maxDist; x < torchHolderX1.get(i) + maxDist; x++){
if(x - maxDist < torchHolderX1.get(i) && x + maxDist > torchHolderX1.get(i)){
torchCrossX = true;
} else {
torchCrossX = false;
}
for(int y = torchHolderY1.get(i) - maxDist; y < torchHolderY1.get(i) + maxDist; y++){
if(y - maxDist < torchHolderY1.get(i) && y + maxDist > torchHolderY1.get(i)){
torchCrossY = true;
} else {
torchCrossY = false;
}
float d = dist(x, y, torchHolderX1.get(i), torchHolderY1.get(i));
if(torchCrossX && torchCrossY){
if(dist(x, y, torchHolderX1.get(i), torchHolderY1.get(i)) <= maxDist){
if(x > 0 && x < width && y > 0 && y < height){
int loc = x+y*width;
float r,g,b;
r = red (pixels[loc]);
g = green (pixels[loc]);
b = blue (pixels[loc]);
float adjustBrightness = maxDist-d-100;
r += adjustBrightness;
g += adjustBrightness;
b += adjustBrightness;
r = constrain(r, 0, 255);
g = constrain(g, 0, 255);
b = constrain(b, 0, 255);
if(torchAnimCounter % 31 < 16){
c = color(r, g, b);
} else {
c = color(r+10, g+10, b+10);
}
pixels[y*width + x] = c;
} } } } } }
}//and same things goes for the second map
мы будем благодарны больше информации о свете, потому что 2D-геометрия не требует молнии. Как вы это настроили или какой свет вы используете? Сколько у вас объектов в эскизе? Возможно, какой-нибудь фрагмент кода будет замечательным. – Majlik
Я просто настраиваю яркость на основе расстояния между источником света и пикселями, без теней. У меня нет большого объекта в моем эскизе, не более 5-6 объектов существ и одного игрока. Я попытаюсь поместить некоторые фрагменты из кодов, которые регулируют яркость. (Ожидание 8 часов) – user3012462
В общем, я бы предположил, что это количество вложенных циклов в вашей схеме draw(), которая, вероятно, замедляется ваша программа ... –