Рисование части изображения (Java)
Вот моя проблема - я пытаюсь нарисовать круглую часть одного изображения.
Я делаю некоторую работу над игрой типа "подземный гусеничный ход" и пытаюсь сделать радиус вокруг игрока. Пол - это одно изображение, и мне нужно нарисовать только маленькую круглую его часть. Я смотрел на этот метод:
drawImage(Image img,
int dx1,
int dy1,
int dx2,
int dy2,
int sx1,
int sy1,
int sx2,
int sy2,
Color bgcolor,
ImageObserver observer)
Но, похоже, это только нарисует квадратный подраздел. Кто-нибудь случайно знает более простой метод, чем рисовать тонны маленьких квадратов, чтобы создать иллюзию круга?
Спасибо
3 ответа
Вы можете сделать это с setClip()
метод в Graphics
,
Нужна другая работа, но:
import java.awt.Graphics;
import java.awt.geom.QuadCurve2D;
//...
g.setClip(new QuadCurve()); // Set the bounding curve for the image.
g.drawImage(...);
Как я уже сказал, это требует больше работы, то есть QuadCurve2D
объект, возможно, должен быть определен по-другому, но вы можете проверить документ для этого.
Наибольший эффект для светового радиуса заключается в использовании наложения с градиентом в его альфа-канале.
Что-то вроде этого:
// 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);
Я не компилировал это, так что, вероятно, он полон ошибок!
Если вам нужно немного "мерцания", вы можете создать несколько карт и добавить шум к альфа-значениям. Или даже настроить цвета, чтобы получить теплый свет.
Это не очень удачное решение, но что, если вы нарисовали весь пол, а затем черное изображение с прозрачной дырой в центре?