Je parie sérieusement que j'ai fait quelque chose de stupide et que je n'arrive pas à le remarquer.
package com.me.mygdxgame;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
public class Locked implements ApplicationListener
{
private OrthographicCamera camera;
private SpriteBatch batch;
private Texture texture;
private Sprite sprite;
private BitmapFont font;
private CharSequence str = "Hello World!";
private float width;
private float height;
@Override
public void create()
{
width = Gdx.graphics.getWidth();
height = Gdx.graphics.getHeight();
camera = new OrthographicCamera(1, height / width);
batch = new SpriteBatch();
texture = new Texture(Gdx.files.internal("data/libgdx.png"));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275);
Sprite = new Sprite(region);
Sprite.setSize(0.9f, 0.9f * Sprite.getHeight() / Sprite.getWidth());
Sprite.setOrigin(Sprite.getWidth() / 2, Sprite.getHeight() / 2);
Sprite.setPosition(-Sprite.getWidth() / 2, -Sprite.getHeight() / 2);
font = new BitmapFont(Gdx.files.internal("data/digib.fnt"),
Gdx.files.internal("data/digib.png"), false);
}
@Override
public void dispose()
{
batch.dispose();
texture.dispose();
}
@Override
public void render()
{
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
font.setColor(0.0f, 0.0f, 0.0f, 1.0f);
//Sprite.draw(batch);
font.draw(batch, str, width*0.5f, height*0.5f);
batch.end();
}
@Override
public void resize(int width, int height)
{
}
@Override
public void pause()
{
}
@Override
public void resume()
{
}
}
Le projet a été généré avec le gabarit fourni. gdx-setup-ui.jar Comme vous pouvez le constater dans le code, je ne me suis pas donné la peine de supprimer les codes par défaut rendre le logo LibGDX).
Donc, avec le projet généré proprement, j'ai suivi ce guide ici http://code.google.com/p/libgdx-users/wiki/addingText2D
et enfin arriver avec le code fourni ci-dessus.
Le problème est, pourquoi le texte!! # # $ Ing ne sera-t-il pas affiché !? J'ai changé la position tellement de fois et toujours pas de chance: \
Ai-je manqué quelque chose?
FYI: Les polices vont bien, je les ai insérées dans un autre jeu et ça marche.
Essayez de changer la matrice de projection comme ceci:
Matrix4 normalProjection = new Matrix4().setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
batch.setProjectionMatrix(normalProjection);
Tout ce que je fais c'est
spriteBatch = new SpriteBatch();
font = new BitmapFont(Gdx.files.internal("data/nameOfFont.fnt"),
Gdx.files.internal("data/nameOfFont.png"), false);
et dans la méthode de rendu
spriteBatch.begin();
font.setColor(1.0f, 1.0f, 1.0f, 1.0f);
font.draw(spriteBatch, "some string", 25, 160);
spriteBatch.end();
Vous pouvez en lire plus sur mon blog: http://algorhymes.wordpress.com/2012/11/17/javalibgdx-fonts/
Personnellement, je ne suis pas un grand fan de la conversion de toutes les polices au format .fnt. Si vous avez besoin de tailles différentes pour une police donnée, vous devez passer beaucoup de temps (et d’espace dans l’application) pour effectuer toutes les conversions.
Vous pouvez simplement utiliser l'extension FreeType et charger directement à partir d'un fichier .ttf
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);
BitmapFont font15 = generator.generateFont(15);
BitmapFont font22 = generator.generateFont(22);
generator.dispose();
Plus d'infos ici
Le rendu se fait de la même manière que l'explique watis.
créer un fichier .fnt à l'aide de hiero fourni par le site Web libgdx
définir la taille de la police 150, il créera un fichier .fnt et un fichier png
copier les deux fichiers dans votre dossier assests
maintenant déclarer la police
Police BitmapFont;
nw dans la méthode create
font = new BitmapFont (Gdx.files.internal ("data/100.fnt"), false); // 100 est le nom de la police que vous pouvez attribuer à votre police.
en rendre
font.setscale (.2f);
font.draw (batch, "tout ce que vous voulez écrire", x, y);
cela fonctionnera bien
Le principal problème de votre code est que vous avez créé un appareil photo avec
viewportWidth = 1 &
viewportHeight = largeur/hauteur
et vous dessinez la police à la largeur * 0.5f et la hauteur * 0.5f qui sont hors de portée de la caméra
Soit changer l’initialisation de la caméra en
camera = new OrthographicCamera(width, height);
.... ou remplacez l'instruction de police de caractères par
font.setScale(1,height/width);
font.draw(batch, str, 0.5f, height/width*0.5f);
Avez-vous essayé de donner votre position manuellement comme ceci? J'espère que cela fonctionnera Batch.setProjectionMatrix (camera.combined); Batch.enableBlending (); Batch.begin ();
font.draw (batch, yourString, 100,100);
batch.end ();