Android libGDX о размерах спрайтов

Я делаю игру с помощью libGDX для Android, и у меня есть вопрос о размерах спрайтов. Я хочу использовать тот же спрайт в качестве фона экрана в пейзажной сцене, и я хочу, чтобы этот фон идеально подходил для всех устройств с соотношением сторон 16:9.

Моя проблема в том, что я не знаю, каков оптимальный размер этого изображения. , потому что, если я сделаю изображение 1920x1080, оно будет использовать много памяти и снизит производительность игры, или если я сделаю маленькое изображение, оно будет плохо смотреться на некоторых устройствах. Какова практика в таких случаях?

Спасибо в совете.


person encrypt    schedule 17.07.2015    source источник


Ответы (1)


Вот как бы я подошел к ситуации. Я выберу размер моей камеры 16:9, возможно, 1024*576 (или что вам подходит), а также для экономии памяти используйте формат .jpg вместо .png, это сэкономит много места

В Libgdx вам не нужно беспокоиться о разных размерах устройств, если вы используете камеру или орфографическую камеру. Я позабочусь о том, чтобы экран подходил правильно даже на устройствах, отличных от 16:9, с некоторым растяжением.

вот кусок кода

public class LoadScreen extends Screen
{

   Game game;
   SpriteBatch batcher;
   OrthographicCamera cam;
   AssetManager manager;
   public static BitmapFont font;
   private String dir="data/";

public LoadScreen(Game game,SpriteBatch batcher)
 {
    super(game);
    this.game=game;
    this.batcher=batcher;
    cam = new OrthographicCamera(GameConstants.CAMERA_WIDTH, GameConstants.CAMERA_HEIGHT);
    cam.position.set(GameConstants.CAMERA_WIDTH / 2, GameConstants.CAMERA_HEIGHT / 2,0);
    manager=new AssetManager();
    font = new BitmapFont(Gdx.files.internal("data/billy.fnt"), Gdx.files.internal("data/billy.png"), false);
    loadData();
}
private void loadData()
{
    manager.load(dir+"monkey",TextureAtlas.class);
    manager.load(dir+"levelBg.jpg",Texture.class);
    manager.load(dir+"gamescreen.jpg",Texture.class);
    manager.load(dir+"apple.png",Texture.class);
}
}

И в классе активов

активы публичного класса {

public static AssetManager manager;
public static TextureAtlas atlas;
private static String dir = "data/";
public static Sprite levelBg;

public static void load(AssetManager manager)
{
    Assets.manager = manager;
    loadAtlas();
    loadTextures();
    loadImageFromAtlas();
    loadFont();
}
private static void loadAtlas()
{
    atlas = manager.get(dir + "monkey", TextureAtlas.class);
}

private static void loadTextures()
{
    levelBg = new Sprite(manager.get(dir + "levelBg.jpg", Texture.class));
    gameBg = new Sprite(manager.get(dir + "gamescreen.jpg", Texture.class));
    apple = new Sprite(manager.get(dir + "apple.png", Texture.class));
}
}

P.S. Вы можете делать что-то немного по-другому, как хотите, но это экономит много памяти, как если бы вы сделали лист спрайтов как .jpg, прозрачность изображений будет потеряна.

person Kumar Saurabh    schedule 17.07.2015
comment
Но я загружаю фон со всеми остальными спрайтами на спрайт-лист, и это может быть .jpg. Это хороший подход? - person encrypt; 17.07.2015
comment
Хорошо, не используйте спрайт для фона. Вы можете загрузить их напрямую. Вам нужно загрузить их как текстуру и обязательно использовать здесь opengl2.0, чтобы избежать концепции изображений powerOf2. Если вам нужно, я могу поделиться образцом кода - person Kumar Saurabh; 17.07.2015