2015-10-16 2 views
0

В настоящее время я работаю с libGDX и попал в странную проблему. Текстуры, которые я использую с партией и прямоугольниками, растянуты. Вот picture. Как вы можете видеть, фон выглядит совершенно нормально, но человек посередине намного выше человека в левом углу, на который он должен выглядеть. Вот мой код:Тексты LibGDX «растянуты»

import java.util.Iterator; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.Input.Keys; 
import com.badlogic.gdx.Screen; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.OrthographicCamera; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.math.Rectangle; 
import com.badlogic.gdx.math.Vector3; 
import com.badlogic.gdx.scenes.scene2d.Stage; 
import com.badlogic.gdx.scenes.scene2d.ui.Image; 
import com.badlogic.gdx.scenes.scene2d.ui.Skin; 
import com.badlogic.gdx.scenes.scene2d.ui.Table; 
import com.badlogic.gdx.utils.Array; 
import com.data.Manager; 

public class GameScreen implements Screen{ 

private Texture backgroundTexture = Manager.manager.get(("Ressources/Hintergrund_Skizze.png"), Texture.class); 
private Texture farmerBackTexture = Manager.manager.get(("Ressources/Farmer_Back_Skizze.png"), Texture.class); 
private Texture farmerRightTexture = Manager.manager.get(("Ressources/Farmer_Right_Skizze.png"), Texture.class); 
private Texture farmerLeftTexture = Manager.manager.get(("Ressources/Farmer_Left_Skizze.png"), Texture.class); 
private Texture ufoTexture = Manager.manager.get(("Ressources/Ufo_Skizze.png"), Texture.class); 
private Texture laserTexture = Manager.manager.get(("Ressources/Magic_Ball.png"), Texture.class); 

private Image backgroundImage = new Image(backgroundTexture); 
private Image farmerBackImage = new Image(farmerBackTexture); 

private Stage levelStage = new Stage(), menuStage = new Stage(); 

private Table menuTable = new Table(); 

private Skin menuSkin = Manager.menuSkin; 

private OrthographicCamera camera; 

private SpriteBatch batch; 

private Rectangle farmer, ufo; 
private Array<Rectangle> lasers; 

private boolean ufoMovementLeft = true; 
private boolean leftArrow = false; 
private boolean rightArrow = false; 

private float laserMovement = 0; 
private int ufoLife = 15; 

@Override 
public void show() { 

    levelStage.addActor(backgroundImage); 
    levelStage.addActor(farmerBackImage); 
    Gdx.input.setInputProcessor(levelStage); 
    camera = new OrthographicCamera(); 
    camera.setToOrtho(false, 800, 480); 
    batch = new SpriteBatch(); 

    farmer = new Rectangle(); 
    farmer.x = 800/2 - 80/2; farmer.y = 80; 
    farmer.width = 80; farmer.height = 270; 

    ufo = new Rectangle(); 
    ufo.x = 800/2; ufo.y = 375; 
    ufo.width = 185; ufo.height = 94; 

    lasers = new Array<Rectangle>(); 
} 

public void movement() { 

    if(Gdx.input.isKeyPressed(Keys.LEFT)) leftArrow = true; 
    if(!Gdx.input.isKeyPressed(Keys.LEFT)) leftArrow = false; 
    if(Gdx.input.isKeyPressed(Keys.RIGHT)) rightArrow = true; 
    if(!Gdx.input.isKeyPressed(Keys.RIGHT)) rightArrow = false; 

} 

@Override 
public void render(float delta) { 

    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    camera.update(); 
    levelStage.act(); 
    levelStage.draw(); 

    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    movement(); 
    if(leftArrow) {if(farmer.x >= 60) farmer.x -= 2; batch.draw(farmerLeftTexture, farmer.x, farmer.y);} 
    else if(rightArrow) {if(farmer.x <= 590) farmer.x += 2; batch.draw(farmerRightTexture, farmer.x, farmer.y);} 
    else batch.draw(farmerBackTexture, farmer.x, farmer.y); 

    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() { 
    levelStage.dispose(); menuStage.dispose(); 
    menuSkin.dispose(); 
    ufoTexture.dispose(); 
    laserTexture.dispose(); 
    farmerBackTexture.dispose(); 
    farmerRightTexture.dispose(); 
    farmerLeftTexture.dispose(); 
}} 

Я надеюсь, что вы в состоянии помочь мне найти ошибку. Cheers, Joshflux

EDIT: Я уверен, что он должен что-то сделать с размером окна. Если я изменяю размер окна с 800 до 200, человек в левом углу выглядит одинаково, но человек посередине меньше. Все еще не могу понять, как его решить, хотя ...

ответ

0

Проблема в том, что ваш levelStage использует другую камеру.

new Stage(); 

Создает сцену с собственной камерой и масштабируемым окном просмотра. И здесь вы создаете другую камеру:

camera = new OrthographicCamera(); 
camera.setToOrtho(false, 800, 480); 

Обратите внимание, что это НЕ задает размер окна!

Со статическим размером, поскольку вы никогда не обновляете его при изменении размера окна.

Поскольку вы используете почву для вашего уровня вы могли бы сделать это:

batch.setProjectionMatrix(levelStage.getCamera().combined); 

Если вы не хотите, масштабирование окна просмотра создать свой собственный (взять смотреть различные видовые) и добавить его в качестве параметр new Stage(viewport).

Чтобы установить размер окна, вам нужно перейти к проекту рабочего стола и изменить его в классе конфигурации.

+0

Спасибо, работал как шарм <3. – Joshflux

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