Pixmap无法按预期工作 - LibGdx

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pixmap无法按预期工作 - LibGdx相关的知识,希望对你有一定的参考价值。

我试图创建一个包含精灵的动态数组,它是从像素贴图中创建的。我想给这个数组元素随机提供不同的颜色。没有工作。

然后我尝试创建一个像素图。这也表明了同样的行为。

我在show()中创建了一个pixmap,如下所示:

 pixmap = new Pixmap(128,128, Format.RGBA8888 );
 Pixmap.setBlending(Pixmap.Blending.None);
 pixmap.setColor(128,0,0,1f);
    pixmap.fillCircle(64, 64, 64 );
    texture = new Texture(pixmap);
    pixmap.dispose();

在渲染()

 sprite = new Sprite(texture);
        sprite.setPosition(b.getX()-sprite.getWidth()/2, b.getY()-
    sprite.getHeight()/2);
        sprite.draw(batch);

每当我给出一个rgb颜色代码时,它会给出一些不同颜色或黑色作为输出。还有十六进制代码。

我在这做错了什么?

以前我使用pixmaps作为叠加和单一纹理等。但没有深入到它并尝试。

在这里,我计划用pixmap绘制实心圆圈,而不是使用图形。因为我的游戏元素是非常简单的实心圆圈和超过10种颜色我应该实现。

这些圈子对象将在整个游戏中动态生成。

现在我想知道我打算做什么对pixmaps有效。没有我在网上发现的例子。

是否可以使用不同颜色的对象创建动态数组?或者使用图形是比pixmaps更好的选择?

如果我从有经验的人那里得到建议,那将会非常有帮助。

答案

r,g,b,a值应在0f到1f的范围内。在render()创建新精灵是不好的,因为它被称为每一帧。

我将尝试使用这个小代码示例回答您的问题(代码中的左侧注释):

public class MyGdxGame extends ApplicationAdapter {

    SpriteBatch spriteBatch;

    Pixmap pixmap;
    Texture texture;

    Array<Sprite> sprites = new Array<Sprite>();

    @Override
    public void create() {
        spriteBatch = new SpriteBatch();

        // you should use only one Pixmap object and one Texture object
        pixmap = new Pixmap(128, 128, Pixmap.Format.RGBA8888);
        pixmap.setBlending(Pixmap.Blending.None);
        pixmap.setColor(Color.WHITE);
        pixmap.fillCircle(64, 64, 64);
        texture = new Texture(pixmap);
        pixmap.dispose();

        // generate sprites with different colors
        // r,g,b,a values should be in range from 0f to 1f
        addCircleSprite(128f / 255f, 0f, 0f, 1f);
        addCircleSprite(0.4f, 0.2f, 0.5f, 1f);
        addCircleSprite(0.6f, 0f, 1f, 1f);
        addCircleSprite(0.3f, 0.8f, 1f, 1f);
        addCircleSprite(0.1f, 1f, 1f, 1f);
    }

    void addCircleSprite(float r, float g, float b, float a) {
        // every sprite references on the same Texture object
        Sprite sprite = new Sprite(texture);
        sprite.setColor(r, g, b, a);
        // I just set random positions, but you should handle them differently of course
        sprite.setCenter(
                MathUtils.random(Gdx.graphics.getWidth()),
                MathUtils.random(Gdx.graphics.getHeight()));
        sprites.add(sprite);
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        spriteBatch.begin();
        for (Sprite sprite : sprites) {
            sprite.draw(spriteBatch);
        }
        spriteBatch.end();
    }

    @Override
    public void dispose() {
        texture.dispose();
    }
}

还读了这个Q/A。我想你可以用白色圆圈从.png文件加载你的Texture对象:

texture = new Texture("whiteCircle.png");

但创建Pixmap圆,半径只有64像素(然后从它创建一个Texture)也没关系,不应该有太大的区别。

另一答案

setColor()将r,g,b,一个参数转换为rgba8888格式 -

public void setColor (float r, float g, float b, float a) {
    color = Color.rgba8888(r, g, b, a);
}

因此,将r,g,b和alpha分量设置为[0,1]范围内的浮点数。

使用

pixmap.setColor(128f/255, 0, 0, 1f);

代替

pixmap.setColor(128, 0, 0, 1f);

如果你想使用十六进制然后 -

Color color = new Color(0x000000a6) //(Black with 65% alpha).

以上是关于Pixmap无法按预期工作 - LibGdx的主要内容,如果未能解决你的问题,请参考以下文章

libgdx- pixmap:我能以某种方式改变线条的宽度吗?

Libgdx之Pixmap

Libgdx之Pixmap

在 Libgdx 中实现简单运动模糊的意外结果

初学者AngularJS代码无法按预期工作[重复]

UIViewPropertyAnimator 无法按预期工作