Comment puis-je dessiner du texte en utilisant Libgdx/Java?
j'ai eu beaucoup de mal à googler comment dessiner des textes 2D simples avec Libgdx. Voici le code que j'ai compilé jusqu'à présent:
SpriteBatch spriteBatch;
BitmapFont font;
CharSequence str = "Hello World!";
spriteBatch = new SpriteBatch();
font = new BitmapFont();
spriteBatch.begin();
font.draw(spriteBatch, str, 10, 10);
spriteBatch.end();
le code dessine la chaîne Hello World, cependant, il gâche tous mes autres dessins. Ils sont là, seulement brutalement mutilés, et se déplacent et tout cela. J'ai essayé Gdx.gl11.glPushMatrix()
et Gdx.gl11.glPopMatrix()
autour d'à peu près chaque sous-ensemble d'énoncés.
j'ai réduit les dessins mutilés à font.draw()
appeler, si cela est pris hors, tout fonctionne très bien (mais bien sûr il n'y a pas de texte).
4 réponses
je ne vois pas beaucoup de raisons de la création de lot distinct pour le dessin. En utilisant gdxVersion = '1.4.1' (construit avec gradle dans Android Studio) que le code dessine le texte avec succès:
BitmapFont font = new BitmapFont(); //or use alex answer to use custom font
public void render( float dt )
{
batch.setProjectionMatrix(camera.combined); //or your matrix to draw GAME WORLD, not UI
batch.begin();
//draw background, objects, etc.
for( View view: views )
{
view.draw(batch, dt);
}
font.draw(batch, "Hello World!", 10, 10);
batch.end();
}
notez que vous dessinez ici les coordonnées du monde du jeu, donc si votre personnage se déplace (dans le jeu de plateforme, par exemple), le texte se déplacera aussi. Si vous voulez voir du texte, qu'il sera fixé à l'écran, quelque chose comme Label/TextField ou comment il est appelé dans différents cadres D'UI, que je recommande à Phase d'utilisation (et TextArea pour le texte), voir par exemple sur la façon d'utiliser le Stade ici: http://www.toxsickproductions.com/libgdx/libgdx-basics-create-a-simple-menu/
Quand j'ai créé la police Bitmap c'était comme ça:
font = new BitmapFont(Gdx.files.internal("Calibri.fnt"),Gdx.files.internal("Calibri.png"),false);
essayez ceci en téléchargeant un fichier de police(tout en téléchargeant une police, veuillez vérifier si .fichier fnt et .png fichier est inclus pour le même)
essayez d'appeler plusieurs lots.begin() et le lot.fin():
CharSequence str = "Hello World!";
spriteBatch = new SpriteBatch();
font = new BitmapFont();
spriteBatch.begin();
font.draw(spriteBatch, str, 10, 10);
spriteBatch.end();
spriteBatch.begin();
//draw your other sprites here
spriteBatch.draw(...);
spriteBatch.end();
ou tout simplement utiliser un autre exemple de SpriteBatch
pour créer un .fichier fnt, utilisez hiero qui est fourni par le site Web de LibGDX.
définit la taille de police 150, Il va créer un .fnt
et le fichier .png
fichier. Copiez les deux fichiers dans votre dossier d'actifs.
Pour déclarer la police:
BitmapFont font;
Au chargement de la police: (Dans la méthode create)
font = new BitmapFont(Gdx.files.internal("data/rayanfont.fnt"), false);
//rayanfont is the font name
Pour le rendu:
batch.begin();
font.setScale(.2f);
font.draw(batch, "hello", x,y);
batch.end();
cela va fonctionner en douceur.