Я не знаю, есть ли более простой способ, но я создал метод для работы с масками и комбинирования маски с исходной pixmap в результирующую pixmap.
public void pixmapMask(Pixmap pixmap, Pixmap mask, Pixmap result, boolean invertMaskAlpha){
int pixmapWidth = pixmap.getWidth();
int pixmapHeight = pixmap.getHeight();
Color pixelColor = new Color();
Color maskPixelColor = new Color();
Pixmap.Blending blending = Pixmap.getBlending();
Pixmap.setBlending(Blending.None);
for (int x=0; x<pixmapWidth; x++){
for (int y=0; y<pixmapHeight; y++){
Color.rgba8888ToColor(pixelColor, pixmap.getPixel(x, y)); // get pixel color
Color.rgba8888ToColor(maskPixelColor, mask.getPixel(x, y)); // get mask color
maskPixelColor.a = (invertMaskAlpha) ? 1.0f-maskPixelColor.a : maskPixelColor.a; // IF invert mask
pixelColor.a = pixelColor.a * maskPixelColor.a; // multiply pixel alpha * mask alpha
result.setColor(pixelColor);
result.drawPixel(x, y);
}
}
Pixmap.setBlending(blending);
}
Единственное, что посмотрело на маску pixmap, - это альфа-канал. Он отображает альфу из маски и объединяет ее с альфой из исходного пикселя, затем записывает значение в пиксельную карту результата.
В вашем случае нарисуйте заполненный круг на маске pixmap любым цветом, если альфа «1f». Тогда результат pixmap будет вашим исходным pixmap, обрезанным по кругу.
ПРИМЕЧАНИЕ: «invertMaskAlpha» boolean позволяет вам переворачивать альфа-канал маски. Поэтому, если вы установите для этого логического значения значение «true», у вас будет оригинальная pixmap с вырезанным из него кругом, оставив только края за пределами круга.
Нужна более подробная информация о том, что именно вы пытаетесь сделать. Добавить статическую маску в текстуру? Или область текстуры/спрайт? Или просто Pixmap? Динамически маскировать определенные элементы на экране? Вам нужно иметь возможность перемещать маску отдельно от изображения и включать и выключать его? – Tenfour04
@ Tenfour04 Thanx для ответа на мой вопрос, я попытался использовать pixmap, потому что я знаю, что этот класс может подтвердить мою цель, но я потерпел неудачу. и «Shader» может это сделать, но я ничего не знаю об этом. это я имею в виду в моем вопросе, у меня не было опыта. поэтому, если вы можете предоставить мне код, я буду благодарен u. – Crowni