Search code examples
javaandroidioslibgdx

libGDX : desgin game assets according different size screens


I develop and design assets (background, buttons,... etc) of my game, but when I design any asset I don't know which screen size do I design?. Many screen sizes different in Android devices or iOS devices. So, if I start design with largest screen, other devices screen's dimensions will be not good and the assets will be too heavy on old devices, and vice if I start design with small screen, other devices screen will be low resolution (if I used for example StrecthViewport).

for example:

stage = new Stage(new StretchViewport(480, 800));

this line on Galaxy note 3 (1080 x 1920) is low resolution

Is there standard designing for the game assets?

Anyone can help me ?


Solution

  • Well there are many ways to achieve your goal. It depends a lot on the game you create so I can give you only a brief overview what works for me:

    Create your assets bigger than the biggest screen you support. F.e. you support 2560x1600 then go with something like 3200x2000.

    Create a TextureAtlas for each TEXTURE_SIZE you support. Smartphones have a MAX_TEXTURE_SIZE you can load into the memory. Its usually 1024x1024, 2048x2048, 4096x4096 (Newer phones and desktop graphic cards might even support even more like 8192x8192 or bigger) I create then 3 TextureAtlas: 4096 with 1:1 scaling, 2048 scaled bei 50%, 1024 scaled by 25%.

    On the devices read the MAX_TEXTURE_SIZE, this snippet can do that.

    public final static int maxTextureSize() {
            /**
             * See http://lwjgl.org/forum/index.php?topic=1314.0;wap2
             */
            IntBuffer max = BufferUtils.newIntBuffer(16);
            max.clear();
            Gdx.gl.glGetIntegerv(GL20.GL_MAX_TEXTURE_SIZE, max);
            return max.get(0);
        }
    

    Then load the TextureAtlas based on the support MAX_TEXTURE_SIZE.

    You can even go further. Just some ideas:

    • you can calculate the perfect Texel size for the current device and repack an TextureAtlas having 1:1 screen pixel fitting asset pixel. Then load from that atlas.

    • Some devices may accept an 4096 texture size but their screen is very small so the 2048 version might work aswell, then load the smaller one.