我正在努力创造" destructable"使用Pixmap在LibGDX中进行地形(2D)。 但是,我设置的颜色无法在屏幕上正确显示。
完整源代码(当前颜色用于调试,发布时应为alpha = 0):
public class Terrain extends Actor implements Disposable {
private Sprite mySprite;
private Texture myTexture;
private Pixmap myMap;
public Terrain(Texture texture, Vector2 position)
{
setPosition(position.x, position.y);
if (!texture.getTextureData().isPrepared()) {
texture.getTextureData().prepare();
}
// Final product will take original image from a texture to create pixmap
// myMap = texture.getTextureData().consumePixmap();
myMap = new Pixmap(400, 400, Pixmap.Format.RGBA8888);
myMap.setBlending(Pixmap.Blending.SourceOver);
myMap.setColor(Color.BLUE);
myMap.fillRectangle(0, 0, 400, 400);
myTexture = new Texture(myMap, Pixmap.Format.RGBA8888, false);
mySprite = new Sprite(myTexture);
}
public void removePixels(List<Vector2> pixels)
{
myMap.setColor(Color.GREEN);
myMap.fillCircle(1,1,1);
myMap.setColor(Color.YELLOW);
for (Vector2 pixel:pixels) {
myMap.fillCircle((int)pixel.x, (int)pixel.y, 1); // Works, but is Black?
myMap.drawPixel((int)pixel.x, (int)pixel.y, 255) // Does not work
}
myTexture = new Texture(myMap, Pixmap.Format.RGBA8888, false);
mySprite = new Sprite(myTexture);
System.out.println("Pixels Removed");
}
@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(mySprite, getX(), getY(), mySprite.getWidth(), mySprite.getHeight());
// batch.draw(myMap, getX(), getY(), myMap.getWidth(), myMap.getHeight());
}
@Override
public void dispose() {
myMap.dispose();
}
由于某种原因,fillCircle中绘制的形状始终为黑色,而使用drawPixel绘制的像素似乎甚至不更新(保持原始颜色)。 如何在LibGDX中设置像素(alpha为0)? (最好不使用glsl)
答案 0 :(得分:1)
当您拨打drawCircle(x, y, 1)
时,您传入的是RGBA8888颜色1,相当于我认为R = 0,G = 0,B = 0,A = 1/255。当你调用.drawPixel((int)pixel.x, (int)pixel.y, 255)
时,你传入的是RGBA8888颜色255,我认为它是R = 0,G = 0,B = 0,A = 1。在这两种情况下,调用都会忽略您在像素图上设置的最后一种颜色。使用不带颜色参数的这些方法的版本。
我看到其他一些错误。如果您不处理旧纹理,每次拨打myTexture = new Texture(...)
时都会泄漏纹理。但实际上你应该将更新的像素图绘制到纹理上,这可能更快。 myTexture.draw(myMap, 0, 0);
此外,如果您没有使用sprite.draw
,则没有理由使用Sprite对象。如果你使用batch.draw
绘制一个精灵,你也可以使用TextureRegion。