How to draw smooth text in libgdx?

前端 未结 10 1271
暖寄归人
暖寄归人 2020-12-01 00:01

I try to draw simple text in my android game on libgdx, but it\'s look sharp. How to make text look smooth in different resolutions? My Code:



        
相关标签:
10条回答
  • 2020-12-01 00:56
    font.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
    

    This gets the texture used in a BitmapFont and changes its filtering to bilinear, allowing higher resulting image quality while both up- and downscaling it at the cost of slightly slower (the difference is usually not noticeable) GPU rendering.

    0 讨论(0)
  • 2020-12-01 00:57

    With many things deprecated after the update, this is what's working for me:

    public void regenerateFonts(OrthographicCamera cam, Game game) {
        int size = 18;
    
        if (cam != null && game != null) {
            // camera and game are provided, recalculate sizes
            float ratioX = cam.viewportWidth / game.getW();
            float ratioY = cam.viewportHeight / game.getH();
            System.out.println("Ratio: [" + ratioX + ":" + ratioY + "]");
    
            size *= ratioY;
        }
    
        // font parameters for this size
        FreeTypeFontParameter params = new FreeTypeFontParameter();
        params.flip = true; // if your cam is flipped
        params.characters = LETTERS; // your String containing all letters you need
        params.size = size;
        params.magFilter = TextureFilter.Linear; // used for resizing quality
        params.minFilter = TextureFilter.Linear; // also
    
        // Lato Light generator
        FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/Lato-Light.ttf"));
    
        // make the font
        fontLatoLight = generator.generateFont(params);
        generator.dispose(); // dispose to avoid memory leaks
    }
    

    And when you want to render it on the screen:

    // text rendering
    fontLatoLight.setColor(Color.WHITE); // set color here (has other overloads too)
    fontLatoLight.draw(batch, "Hello World!", xCoord, yCoord);
    
    0 讨论(0)
  • 2020-12-01 01:00

    My Solution for smooth text with Libgdx

    I use BitmapFont and I generate 3 different size same fonts using Hiero tool example Arial 16 , Arial 32, Arial 64

    I put them in my assets file and use (load) only one of them depeding on the size of screen

    if(Gdx.graphics.getWidth() < (480*3)/2)
            {
                textGametFont = BitmapFont(Gdx.files.internal(nameFont+16+".fnt"),
                        Gdx.files.internal(nameFont+16+".png"), false);
            }else
            {
                if(Gdx.graphics.getWidth() < (3*920)/2)
                {
    
                    textGametFont = new BitmapFont(Gdx.files.internal(nameFont+32+".fnt"),
                            Gdx.files.internal(nameFont+32+".png"), false);
                }else
                {
                    textGametFont = new BitmapFont(Gdx.files.internal(nameFont+64+".fnt"),
                            Gdx.files.internal(nameFont+64+".png"), false);
                }
            }
    

    then I use this line of code to higher result quality of down and up Scaling

    textGametFont.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
    

    scale the image

    to handle the size of the font for all type of resolution of device I use those two functions

    public static float xTrans(float x)
    {
        return x*Gdx.graphics.width/(YourModel.SCREEN_WIDTH);
    }
    
    public static float yTrans(float y)
    {
        return y*Gdx.graphics.height/YourModel.SCREEN_Height;
    }
    

    the model screen resolution that i use is

    SCREEN_WIDTH = 480

    SCREEN_HEIGHT = 320

    Set the scale to the font

    textGametFont.setScale((xtrans(yourScale)+ ytrans(yourScale))/2f);
    

    and finally draw your text

    textGametFont.draw(batch, "WINNER !!", xTrans(250), yTrans(236));
    

    Hope this was clear and helpful !!!

    0 讨论(0)
  • 2020-12-01 01:04
    private BitmapFont font;
    
    font = new BitmapFont();
    
    font.scale((ppuX*0.02f));
    
    font.draw(spb, "Score:", width/2-ppuX*2f, height-0.5f*ppuY);
    
        Check out [this](http://www.badlogicgames.com/wordpress/?p=2300) blog post.
    

    ??? This just explains how to use the .scale() method which I'm stating is deprecated in the current release.

    0 讨论(0)
提交回复
热议问题