java – libgdx – 如何绘制一些像素
发布时间:2020-12-14 19:24:44 所属栏目:Java 来源:网络整理
导读:我正在尝试更改像素图并渲染它,但修改后的像素不会显示在屏幕上.我不确定Pixmap是否是最好的方法.任何人都可以向我解释我的错误在下面的代码中?谢谢 package com.me.mygdxgame;import com.badlogic.gdx.ApplicationListener;import com.badlogic.gdx.Gdx;im
我正在尝试更改像素图并渲染它,但修改后的像素不会显示在屏幕上.我不确定Pixmap是否是最好的方法.任何人都可以向我解释我的错误在下面的代码中?谢谢
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() { } } 解决方法
您正在为每个循环创建一个新的像素图,并且不会在视图中绘制完整的纹理.
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); } } 但这很慢,所以你为什么要这样做呢? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |