2016-04-04 7 views
2

Je fais une application pour m'aider à retenir quelques mots thaïlandais que j'apprends.Comment est-ce que je rends correctement la police thaïlandaise dans libGDX?

Cependant, je n'arrive pas à obtenir un rendu correct du texte.

J'ai utilisé this example pour créer une scène de base. C'est ce que j'ai jusqu'ici.

public class ThaiWords extends ApplicationAdapter { 

OrthographicCamera cam; 
SpriteBatch batch; 
BitmapFont thaiFont; 

@Override 
public void create() { 

    FreeTypeFontGenerator generator; 

    FreeTypeFontParameter parameter = new FreeTypeFontParameter(); 
    parameter.size = 18; 
    parameter.characters = "ก"; 

    generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/garuda.ttf")); 
    thaiFont = generator.generateFont(parameter); 
    generator.dispose(); 

    batch = new SpriteBatch(); 

    cam = new OrthographicCamera(); 
    cam.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    cam.update(); 
} 

@Override 
public void render() { 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    batch.setProjectionMatrix(cam.combined); 
    batch.begin(); 
    thaiFont.draw(batch, "ก", 0, 66); 
    batch.end(); 
} 

@Override 
public void resize (int width, int height) { 
    cam.setToOrtho(false, width, height); 
} 
} 

Pour tester, j'aimerais simplement afficher le caractère «ก». Le code ci-dessus produit un "?" symbole.

J'ai directement téléchargé la police garuda.tff à partir du libGDX directory. Je ne sais pas vraiment ce qui me manque! J'ai même essayé de générer un bitmap avant l'exécution mais cela a produit un écran vide.

Un conseil serait formidable!

edit: J'ai remarqué sur Android Studio que lorsque je ferme et rouvre le projet, le code actuel passe de "ก" à "?". C'est peut-être un problème d'encodage mais je n'ai aucune idée de comment y remédier.

+0

Etes-vous sûr Garuda a des caractères thaïlandais? – Tenfour04

+0

Je suis certain que oui. Il est spécialement conçu pour avoir des caractères thaï faciles à lire. J'ai également ajouté à mes polices dans Windows et tapé les caractères. Plus d'informations peuvent être trouvées ici http://slice-of-thai.com/fonts/#garuda – Johnny

Répondre

2

Je vous suggère d'utiliser Stage et Label pour rendre le texte.
à créer:

Stage stage = new Stage(); 
Label label = new Label("วรณ", new Label.LabelStyle(thaiFont, Color.YELLOW)); 
label.setPosition(200,10); 
stage.addActor(label); 

puis en méthode render:

stage.act(delta); 
stage.draw(); 

Je l'ai testé et cela a fonctionné très bien.

enter image description here

+0

Merci pour votre réponse. Hm je reçois toujours "?" sur mon système. Utilisez-vous Android Studio? Pourriez-vous partager vos paramètres de codage dans Paramètres -> Editeur -> Encodages de fichiers, s'il vous plaît? – Johnny

+0

Réponse mise à jour. J'utilise IntelliJ IDEA Community Edition 15.0.3. Mon système d'exploitation est Windows 10 et la langue du système est le russe. – Enigo

+0

Nous vous remercions de votre aide. J'ai changé l'encodage de windows-1251 en UTF-8 pour ma classe principale ainsi que le.fichier ttf et maintenant les deux méthodes de rendu de travail. – Johnny

1

J'ai eu le même problème. Ce n'est pas un problème avec votre code ni votre générateur de polices libGdx. Générateur de polices et l'extension libgdx Freetype fonctionne très bien avec le jeu de caractères UTF-8, y compris les caractères spéciaux. Vous avez juste besoin de sauvegarder vos fichiers de propriétés en encodage UTF-8.

Vous pouvez utiliser n'importe quel autre éditeur de texte pour enregistrer le fichier de propriétés en codage UTF-8 ou Si vous utilisez Android Studio, accédez à Fichier-> Paramètres-> Éditeur-> Encodage de fichier. Ensuite, modifiez "Codage par défaut pour les fichiers de propriétés" dans UTF-8.

Ensuite, vous devez retaper tous les caractères spéciaux sur chaque fichier de propriétés. parce que l'encodage précédent a gâché les caractères inconnus.

Que tout devrait bien fonctionner!

enter image description here