Самым полезным эффектом для светового радиуса будет использование наложения с градиентом в его альфа-канале.
Примерно так:
// do this once during setup
overlay = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGBA);
for (int x = 0; x < width; ++x)
{
for (int y = 0; y < height; ++y)
{
double range = 100;
double distance = Math.sqrt(Math.pow(x - width / 2, 2) + Math.pow(y - height / 2, 2));
int value = Math.max(100, (int)Math.round(255 - 100 * distance / range));
overlay.setRGB(x, y, new Color(0, 0, 0, value));
}
}
....
// do this every frame
gfx.drawImage(overlay, 0, 0, null);
Я не скомпилировал это, поэтомувероятно, полно ошибок!
Если вы хотите, чтобы в нем было какое-то "мерцание", вы можете создать несколько карт и добавить шум к альфа-значениям.Или даже настроить цвета, чтобы получить теплый свет.