Java – libgdx – how to draw some pixels
•
Java
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
二维码