Java – libgdx – how to draw some pixels

I'm trying to change the pixel map and render it, but the modified pixels won't appear on the screen I'm not sure if pixmap is the best way Anyone can explain my error to me in the following code? thank you

package com.me.mygdxgame;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.utils.Array;

public class MyGdxGame implements ApplicationListener {

    private OrthographicCamera camera;
    private SpriteBatch batch;
    private Pixmap _pixmap;
    private int _width;
    private int _height;
    private Texture  _pixmapTexture;
    private Sprite _pixmapSprite;
    private int _x = 0;
    private int _y = 0;

    @Override
    public void create() {      
        float w = Gdx.graphics.getWidth();
        float h = Gdx.graphics.getHeight();

        camera = new OrthographicCamera(1,h/w);
        batch = new SpriteBatch();

        _width = (int)Math.round(w);
        _height = (int)Math.round(h);
        _pixmap = new Pixmap( _width,_height,Format.RGBA8888 );
        _pixmap.setColor(Color.RED);
        _pixmap.fillRectangle(0,_width,_height);
        _pixmapTexture = new Texture(_pixmap,Format.RGB888,false);
    }

    @Override
    public void dispose() {
        batch.dispose();
        _pixmap.dispose();
        _pixmapTexture.dispose();
    }

    @Override
    public void render() {  
        updatePixMap();

        Gdx.gl.glClearColor(1,1,1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        batch.draw(_pixmapTexture,-_width/2,-_height/2);
        batch.end();
    }

    private void updatePixMap() {
        _x += 1;
        if (_x >= _width) {
            _x = 0;
        }

        _y += 1;
        if (_y >= _height / 2) {
            return;
        }

        _pixmap = new Pixmap( _width,Format.RGBA8888 );
        _pixmap.setColor(Color.CYAN);
        _pixmap.drawPixel(_x,_y);
        _pixmapTexture = new Texture(_pixmap,false);
    }

    @Override
    public void resize(int width,int height) {
    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }
}

Solution

You are creating a new pixel map for each loop and will not draw a complete texture in the view

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;

public class MyGdxGame implements ApplicationListener {

    private OrthographicCamera  camera;
    private SpriteBatch         batch;
    private Pixmap              _pixmap;
    private Texture             _pixmapTexture;
    private int                 _x  = 0;
    private int                 _y  = 0;
    private float               _w;
    private float               _h;
    private int                 _width;
    private int                 _height;

    @Override
    public void create() {
        _w = Gdx.graphics.getWidth();
        _h = Gdx.graphics.getHeight();
        _width = MathUtils.round(_w);
        _height = MathUtils.round(_h);

        camera = new OrthographicCamera(1f,_h / _w);
        camera.setToOrtho(false);
        batch = new SpriteBatch();

        _pixmap = new Pixmap(_width,Format.RGBA8888);
        _pixmap.setColor(Color.RED);
        _pixmap.fillRectangle(0,false);
    }

    @Override
    public void dispose() {
        batch.dispose();
        _pixmap.dispose();
        _pixmapTexture.dispose();
    }

    @Override
    public void pause() {
    }

    @Override
    public void render() {
        updatePixMap();

        Gdx.gl.glClearColor(1,1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

        batch.setProjectionMatrix(camera.combined);

        batch.begin();
        batch.draw(_pixmapTexture,1f / 2f,_h / _w / 2f);
        batch.end();
    }

    @Override
    public void resize(final int width,final int height) {
    }

    @Override
    public void resume() {
    }

    private void updatePixMap() {
        _x += 1;
        if (_x >= _width) _x = 0;

        _y += 1;
        if (_y >= _height / 2) return;

        _pixmap.setColor(Color.CYAN);
        _pixmap.drawPixel(_x,false);
    }
}

But it's slow, so why are you doing this?

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>