簡體   English   中英

繪制單個像素LibGDX

[英]Drawing individual pixels LibGDX

我正在使用Java中的LibGDX編寫程序,我希望每隔10幀用屏幕上的新像素更新屏幕。 我嘗試過使用像素圖,但似乎無法正常工作。 這是我的代碼:

package com.mhsjlw.heat;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
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;

public class Heat extends ApplicationAdapter {

SpriteBatch batch;
Texture img;
private OrthographicCamera camera;

FlirClient flir = new FlirClient("x.x.x.x.x", 2525);
int[] palette = FlirPalette.IRONBOW_PALETTE;
byte[] frame = new byte[4800];

@Override
public void create() {

    flir.run();

    camera = new OrthographicCamera();
    camera.setToOrtho(false, 80, 60);

    Pixmap pixmap = new Pixmap( 80, 60, Format.RGB888);

    pixmap.drawPixel(1, 1);


}

@Override
public void render() {

    camera.update();

    Pixmap pixmap = new Pixmap( 80, 60, Format.RGB888);



    while(true) {

        frame = flir.getFrame();

        for (int row=0; row<60; row++) {
            for (int col=0; col<0; col++) {
                int ndx = row * 80 + col;
                pixmap.drawPixel(col, row, FlirPalette.getRgb888(frame[ndx], palette));
            }
        }

        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
}

每當我運行它,它只會返回一個黑屏。 提前致謝。

您的代碼中存在一個問題:您在render有一段while(true)但從不break

不過,這不是唯一的問題。 您正在為Pixmap繪制像素,但您永遠不會渲染Pixmap本身。 您需要從Pixmap創建Texture

package com.mhsjlw.heat;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
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;

public class Heat extends ApplicationAdapter {

    private SpriteBatch batch;
    private Texture img;
    private OrthographicCamera camera;

    private FlirClient flir = new FlirClient("69.165.165.194", 2525);
    private int[] palette = FlirPalette.IRONBOW_PALETTE;
    private byte[] frame = new byte[4800];

    @Override
    public void create() {

        flir.run();

        camera = new OrthographicCamera();
        camera.setToOrtho(false, 80, 60);
        batch = new SpriteBatch();

        //this is useless here
        Pixmap pixmap = new Pixmap( 80, 60, Format.RGB888);

        pixmap.drawPixel(1, 1);
    }

    @Override
    public void render() {

        camera.update();

        Pixmap pixmap = new Pixmap( 80, 60, Format.RGB888);

        while(true) { //add a condition!

            frame = flir.getFrame();

            for (int row=0; row<60; row++) {
                for (int col=0; col<0; col++) {
                    int ndx = row * 80 + col;
                    pixmap.drawPixel(col, row, FlirPalette.getRgb888(frame[ndx], palette));
                }
            }

            img = new Texture(pixmap); //create Texture from Pixmap
            pixmap.dispose(); //do not leak memory
            batch.begin();
            batch.draw(img, 100, 100); //draw pixmap texture
            batch.end();

            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

我已經評論了我已經改變的東西(除了課程開頭的private修飾符),但是代碼的一些有問題的部分保持不變。

你應該為你的while循環添加一個條件,它目前是無限的。 此外,每次運行代碼時都不應該創建新的Pixmap ,這不僅設計糟糕而且浪費時間。

如果我錯過了什么,我會更新我的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM