2015-05-05 4 views
0

Я новичок в libgdx, и у меня есть большая проблема. Я разрабатываю игру, используя пиксельные спрайты, и они хорошо смотрятся в моем телефоне, но если я тестирую игру на другом телефоне, спрайты выглядят очень растянутыми и плохими.Видовые экраны и пиксельные спрайты - libgdx

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

Любые помощь или подсказки, пожалуйста?

Это мой фактический код

@Override 
public void show() { 
    batch = new SpriteBatch(); 
    float w = Gdx.graphics.getWidth(); 
    float h = Gdx.graphics.getHeight(); 

    camera = new OrthographicCamera(); 
    viewport = new FillViewport(320,480,camera); 
    viewport.apply(); 
    camera.position.set(camera.viewportWidth/2,camera.viewportHeight/2,0); 

    tiledMap = new TmxMapLoader().load("TESTMAP.tmx"); 
    tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap); 

    img = new Texture("badlogic.jpg"); 
} 

@Override 
public void render(float delta) { 
    // Gdx.gl.glClearColor(193/255f, 208/255f, 160/255f, 1); 
    Gdx.gl.glClearColor(1,1,1, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    camera.update(); 

    tiledMapRenderer.setView(camera); 
    tiledMapRenderer.render(); 

    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    batch.draw(img,0, 0); 
    //batch.draw(pad, player.x, -40); 
    batch.end(); 

} 

@Override 
public void resize(int width, int height) { 
    viewport.update(width,height); 
    camera.position.set(camera.viewportWidth/2, camera.viewportHeight/2, 0); 

} 
+0

Добро пожаловать в переполнение стека! Можете ли вы показать свой код, чтобы мы могли видеть, что вы уже пробовали? –

+0

Я обновил вопрос с помощью моего текущего кода :) – Danichu

ответ

1

FillViewport - это единственный видовой экран, который отображает часть мирового видения (что видит камера), поэтому центрирование камеры на мировом изображении, как и вы, не обязательно должно помещать 0,0 в левом нижнем углу экрана.

Я думаю, вы, скорее всего, захотите ExtendViewport.

Я не могу придумать ситуацию, когда FillViewport стоил бы хлопот, потому что вы всегда будете бороться с тем, что некоторые из ваших игр обрезаются на некоторых устройствах. Но если необходимо, вы можете настроить для обрезки, чтобы получить 0,0 в правом нижнем углу, делая что-то вроде этого:

camera.position.set(
    viewport.getWorldWidth()/2 + (float)viewport.getScreenX()/(float)viewport.getScreenWidth()*viewport.getWorldWidth(), 
    viewport.getWorldHeight()/2 + (float)viewport.getScreenY()/(float)viewport.getScreenHeight()*viewport.getWorldHeight(), 
    0); 

Как вы можете видеть, FillViewport громоздко работать.

Кстати, нет необходимости применять ваш видовой экран или обновлять камеру в методе show, так как вы делаете это в resize в любом случае.

+0

Ницца! Теперь он работает хорошо! Я тестировал ExtendViewport, но FillViewport - это то, что мне кажется лучше. Большое вам спасибо за помощь! – Danichu

1

Вместо того, чтобы объявить вас фотоаппарат таким образом, вы можете объявить его как этот

float w = Gdx.graphics.getWidth(); 
    float h = Gdx.graphics.getHeight(); 
    cam = new OrthographicCamera(30, 30 * (h/w)); 
    cam.position.set(cam.viewportWidth/2f, cam.viewportHeight/2f, 0); 
    cam.update(); 

Это не растягивать изображения и вы можете также осуществить движение камеры

Подробнее here.

+0

Спасибо за ответ, но мне нужна помощь с видовыми экранами ^^ – Danichu

+0

@Danichu Я знаю, что я написал о камере. У меня была одна и та же проблема с одной из моих игр, но я решил проблему, как то, что я написал. Поэтому сделайте резервную копию для своего оригинального проекта и попробуйте мой код. Скажите мне, если это не сработает. – Fish

+0

Вы правы, я тоже могу решить проблему с этим кодом! Большое спасибо! – Danichu

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