加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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);
    }
}

但这很慢,所以你为什么要这样做呢?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读