2017-02-21 3 views
0

сначала я знаю, что это тема, у которой уже много тем, но я до сих пор ничего не понимаю.Соотношение сторон и область просмотра с Android: требуется экспликация

Я пытаюсь сделать игры для Android (загружаемые в Play Маркете), но у меня есть одна проблема, которая останавливает меня каждый раз, как я могу сделать игру, которая может воспроизводиться на всех телефонах с одинаковым соотношением сторон?

Для примера: Я хочу создать игру, в которой какой-либо объект случайно выпадет из верхней части экрана на катактере игрока.

Как распечатать фоновое изображение, изображение проигрывателя и изображение падающего объекта, которое как один и тот же аспект на каждом телефоне?

Прежде всего я хочу, чтобы напечатать bakcground изображение Вот что я в настоящее время:

public class MyAwesomeGame extends Game { 
    public SpriteBatch batch; 

    @Override 
    public void create() { 
     batch = new SpriteBatch(); 
     setScreen(new MenuScreen(this)); 
    } 

    @Override 
    public void render() { 
     super.render(); 
    } 

    @Override 
    public void dispose() { 
     batch.dispose(); 
    } 
} 

И:

public class MenuScreen implements Screen { 

    private MyAwesomeGame game; 

    public MenuScreen(MyAwesomeGame game){ 
     this.game = game; 
    } 

    @Override 
    public void show() {} 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(1, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     game.batch.begin(); 
     game.batch.end(); 
    } 

    @Override 
    public void resize(int width, int height) {} 

    @Override 
    public void pause() {} 

    @Override 
    public void resume() {} 

    @Override 
    public void hide() {} 

    @Override 
    public void dispose() {} 
} 

Пожалуйста, может кто-нибудь объяснить мне, что я должен сделать или дать мне некоторые коды?

ответ

1

viewport на самом деле то, что вам нужно. Если вы хотите, чтобы изображение с одинаковым соотношением сторон для каждого устройства вы могли использовать StretchViewport, это автоматически уменьшит ваше изображение на основе соотношения сторон устройства, но оно уменьшит качество изображения.

Если вы не хотите, чтобы качество изображения было разрушено, используйте FillViewport, он также поддерживает соотношение сторон виртуального экрана, но в отличие от FitViewport он всегда будет заполнять весь экран, что может привести к тому, что части видовое окно отключено.

Если вы хотите, чтобы фоновое изображение не на весь экран, а затем сделать что-то вроде этих:

int width = Gdx.graphics.getWidth(); \\ get the width of the device 
int height = Gdx.graphics.getHeight(); \\ get the height of the device 

Texture backgroundImage = new Texture(pathName); 
Image image = new Image(backgroundImage); 
image.setSize(width,height); \\ background image will fill up your whole screen 

Image player = new Image(new Texture(pathname)); \\ it's the same as what we did above 

Stage stage = new Stage(new StretchViewport(width,height)); 
stage.addActor(player); \\ add your player and background image to stage 
stage.addActor(image); 

Нажмите на эту link для получения дополнительной информации о Stage Два параметра в StretchViewport протянет базу ширину и высоту на соотношение сторон устройства.

Теперь ваш метод рендеринга обновит и отобразит ваше изображение.

@Override 
    public void render(float delta) { 
    Gdx.gl.glClearColor(1, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    stage.act(); 
    stage.draw(); 
} 

Надеюсь, эта помощь!

+0

Спасибо!Да, это очень помогло мне теперь, когда моя игра отлично работает на всех устройствах, которые у меня есть: D последнее, что мне нужно, это научиться создавать персонализированные кнопки, чтобы создать меню, которое скачет, и я закончу свою первую игру на Android – Kolopox

+1

@lan i подумайте, что есть ошибка. Ширина и высота устройства вычисляются по Gdx.graphics.getWidth() и Gdx.graphics.getHeight() не из image.getWidth() и image.getHeight(). – Aryan

+0

@Abhishek Aryan, вы правы. Я, должно быть, смутился при использовании плиточной карты, потому что вы не можете установить размер tiledMap, чтобы заполнить весь экран, и у меня есть размер tilemap для растягивания. Хотя я могу ошибаться. Спасибо за исправление. Я отредактировал его – Sparcsky

0

Это именно то, для чего используются Видовые экраны.

В окне просмотра будут обрабатываться различные разрешения. See the Viewport wiki для разных типов видовых экранов и различий между ними.

Есть также некоторые учебные пособия, которые могут помочь вам начать с видовых экранов. GameFromScratch имеет один, но есть и многое другое в видовых экранах.

+0

У меня есть два вопроса по учебнику GameFromScratch: когда они используют «новый FitViewPort (cam, 100,100)»; что такое «100»? Это размер изображения? И они в пикселях? – Kolopox

Смежные вопросы