DebugPanel

Es buena costumbre implementar herramientas de diagnóstico lo más temprano posible, y como ya la base y primera escena están listas, es tiempo de codificar un panel visual con información en tiempo real.

Aprovechando la librería de Scene2d.ui usaré «Label» y «Table» para codificar una pequeña ventana para mostrar información importante en vivo para facilitar y diagnosticar el proceso.

Para esto, necesito un arreglo de «Labels», un «Table» y utilizar el «StringBuilder».

private final StringBuilder stringBuilder;
private final Label[] labels;
private final Table table;

Proximo, iniciar todo en el constructor. Java trae la clase de «StringBuilder», pero estoy usando la de LibGDX.

stringBuilder = new StringBuilder();

labels = new Label[3];

table = new Table();
table.pad(20).setFillParent(true);
table.defaults().padBottom(-1).fill();

El primer texto en la tabla será el título del proyecto. Creo nuevo «Label», se añade a la tabla y se llama al método «row» para una nueva línea.

Label label = new Label("THEOLIUM BY QUAGEM", skin, "Style2");
table.add(label);
table.row();

Información de la resolución actual (RES). Además de leer la resolución al inicio, este texto también se actualiza cada vez que el dispositivo cambia de orientación.

setResolutionString();

labels[0] = new Label(stringBuilder, skin, "Style1");

table.add(labels[0]).row();

private void setResolutionString() {
    stringBuilder.setLength(0);
    stringBuilder.append("RES: ");
    stringBuilder.append(Math.round(mStage.getWidth()));
    stringBuilder.append(" X ");
    stringBuilder.append(Math.round(mStage.getHeight()));
}

Densidad en píxeles de la pantalla (DEN):

setDensityString();
        
labels[1] = new Label(stringBuilder, skin, "Style1");

table.add(labels[1]).row();

private void setDensityString() {
    stringBuilder.setLength(0);
    stringBuilder.append("DEN: ");
    stringBuilder.append(Gdx.graphics.getDensity());
}

Para actualizar resolución y densidad solo necesito hacerlo cuando la pantalla cambia de tamaño u orientación, por eso añado este código en el modulo de «resize»:

public void resize() {

    setResolutionString();
    labels[0].setText(stringBuilder);

    setDensityString();
    labels[1].setText(stringBuilder);
}

Por ultimo, «Frames Per Second» (FPS) y conteo de entidades:

setFPSString();

labels[2] = new Label(stringBuilder, skin, "Style2");

table.add(labels[2]).row();

private void setFPSString() {
    stringBuilder.setLength(0);
    stringBuilder.append("FPS: ");
    stringBuilder.append("[");
    stringBuilder.append(Gdx.graphics.getFramesPerSecond());
    stringBuilder.append("]-[");
    stringBuilder.append(getActorCount());
    stringBuilder.append("]");
}

Para actualizar los (FPS) en vivo, añado este código en el método de «render»:

public void render() {
    setFPSString();
    labels[2].setText(stringBuilder);
}

Y asi se ve:

Únete a otros 35 suscriptores

Deja una respuesta

Anuncios


Anuncios