Изменение прозрачности текстуры в LibGDX

Я хочу иметь foreground Текстура наложена на background текстура. Помимо этих двух текстур, у меня также есть mask это указывает, какие части переднего плана должны быть прозрачными. Вот что я попробовал:

// Initially, the mask should have an alpha of 1
Pixmap mask = new Pixmap(128, 128, Pixmap.Format.Alpha);

// Cut a rectangle of alpha value 0
mask.setColor(new Color(0f, 0f, 0f, 0f));
mask.fillRectangle(0, 0, 32, 32);

// Load the foreground. The foreground should the same alpha values
// as the mask. If the mask has an alpha value of 1, then the foreground is
// visible. If the mask is 0, then the foreground is invisible.
Pixmap fg = new Pixmap(Gdx.files.internal("foreground.png"));
fg.drawPixmap(mask, fg.getWidth(), fg.getHeight());
Texture foreground = new Texture(fg);

Texture background = new Texture("background.png");

Само собой разумеется, результаты не являются тем, что я хочу, чтобы они были. Что я должен изменить, чтобы фон был виден везде, где маска имеет значение альфа 0, а передний план виден везде, где маска имеет значение альфа 1.

1 ответ

Решение

Я думаю, что проблема здесь в смешении. Pixmap.setBlending () установлен в SourceOver по умолчанию. Это означает, что рисование прямоугольника с альфа-0 не приводит к изменениям вообще, так как вы рисуете невидимый прямоугольник. Попробуйте установить его Pixmap.Blending.None чтобы действительно вырезать прямоугольник.

// Initially, the mask should have an alpha of 1
Pixmap mask = new Pixmap(128, 128, Pixmap.Format.Alpha);

// Cut a rectangle of alpha value 0
mask.setBlending(Pixmap.Blending.None);
mask.setColor(new Color(0f, 0f, 0f, 0f));
mask.fillRectangle(0, 0, 32, 32);

Pixmap fg = new Pixmap(Gdx.files.internal("foreground.png"));
fg.drawPixmap(mask, fg.getWidth(), fg.getHeight());
mask.setBlending(Pixmap.Blending.SourceOver);

Texture foreground = new Texture(fg);
Texture background = new Texture("background.png");

На самом деле вам даже не нужно создавать маску, но вы можете напрямую "вырезать" прямоугольник на переднем плане изображения.

Другие вопросы по тегам