2016-02-22 4 views
0

Im пытается изучить книгу, чтобы узнать игровой движок LibGDX, но у меня проблема с отображением черепичных карт. я думаю, что написал тот же код с книгой, но я не смог получить тот же результат.LibGdx Tiled Map Rendering Issue

его простая игра с символом и картой. Когда я отобразил свой персонаж и фон, проблем не было.

его вид:

http://i66.tinypic.com/nb97nq.png

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

enter link description here

те мои GameManager и классы ScreenManager, может быть, вы можете понять, что я сделал неправильно ..

public class GameManager { 

static TiledMap map; 
public static TiledMapRenderer renderer;///// 

//region paddle 
static TextureRegion leftPaddleTexture; 
static TextureRegion rightPaddleTexture; 
static Sprite leftPaddleSprite; 
static Sprite rightPaddleSprite; 
public static final float PADDLE_RESIZE_FACTOR = 700f; 
public static final float PADDLE_ALPHA = 0.25f; 
public static final float PADDLE_HORIZ_POS_FACTOR = 0.02f; 
public static final float PADDLE_VERT_POSITION_FACTOR = 0.01f; 
//endregion 

static AssetManager assetManager; 
static TextureAtlas texturePack; 

static Bob bob; 

static TextureRegion bobSpriteSheet; 

public static Sprite backgroundSprite; 
public static Texture backgroundTexture; 

public static final float BOB_RESIZE_FACTOR = 400f; 

public static void loadAssets() 
{ 
    assetManager.load(GameConstants.backgroundImage, Texture.class); 
    assetManager.load(GameConstants.texturePack, TextureAtlas.class); 


    assetManager.setLoader(TiledMap.class, new TmxMapLoader(new InternalFileHandleResolver())); 


    assetManager.load(GameConstants.level1, TiledMap.class); 


    assetManager.finishLoading(); 
} 

public static void initialize(float width, float height) 
{ 



    assetManager = new AssetManager(); 
    loadAssets(); 


    map = assetManager.get(GameConstants.level1); 
    renderer = new OrthogonalTiledMapRenderer(map, GameConstants.unitScale); 

    GameScreen.camera.setToOrtho(false, 35,20); 
    GameScreen.camera.update(); 


    renderer.setView(GameScreen.camera); 

    texturePack = assetManager.get(GameConstants.texturePack); 

    initializeLeftPaddle(width,height); 
    initializeRightPaddle(width, height); 

    bob = new Bob(); 
    bobSpriteSheet = texturePack.findRegion(GameConstants.bobSpriteSheet); 
    bob.initialize(width,height,bobSpriteSheet); 


    bob.bobSprite = new Sprite(bobSpriteSheet); 

    //set the size of the bob 
    bob.bobSprite.setSize((walkSheet.getRegionWidth()/ANIMATION_FRAME_SIZE) * (width/BOB_RESIZE_FACTOR), 
      walkSheet.getRegionHeight()*(width/BOB_RESIZE_FACTOR)); 

    bob.bobSprite.setPosition(width/2f, 0); 

    backgroundTexture =assetManager.get(GameConstants.backgroundImage); 
    backgroundSprite = new Sprite(backgroundTexture); 

    backgroundSprite.setSize(width, height); 

} 

public static void renderGame(SpriteBatch batch) 
{ 
    backgroundSprite.draw(batch); 
    bob.update(); 
    bob.render(batch); 
    leftPaddleSprite.draw(batch); 
    rightPaddleSprite.draw(batch); 

} 

public static void dispose() 
{ 
    assetManager.unload(GameConstants.backgroundImage); 
    assetManager.clear(); 
} 

public static void initializeLeftPaddle(float width, float height) 
{ 
    leftPaddleTexture = texturePack.findRegion(GameConstants.leftPaddleImage); 
    leftPaddleSprite = new Sprite(leftPaddleTexture); 

    leftPaddleSprite.setSize(leftPaddleSprite.getWidth()*width/PADDLE_RESIZE_FACTOR, 
      leftPaddleSprite.getHeight()*width/PADDLE_RESIZE_FACTOR); 

    leftPaddleSprite.setPosition(width * PADDLE_HORIZ_POS_FACTOR, height * PADDLE_VERT_POSITION_FACTOR); 

    leftPaddleSprite.setAlpha(PADDLE_ALPHA); 
} 

public static void initializeRightPaddle(float width, float height) 
{ 
    rightPaddleTexture = texturePack.findRegion(GameConstants.rightPaddleImage); 
    rightPaddleSprite = new Sprite(rightPaddleTexture); 

    rightPaddleSprite.setSize(rightPaddleSprite.getWidth()*width/PADDLE_RESIZE_FACTOR, 
      rightPaddleSprite.getHeight()*width/PADDLE_RESIZE_FACTOR); 

    rightPaddleSprite.setPosition(leftPaddleSprite.getX() + leftPaddleSprite.getWidth() + width * PADDLE_HORIZ_POS_FACTOR, 
      height * PADDLE_VERT_POSITION_FACTOR); 

    rightPaddleSprite.setAlpha(PADDLE_ALPHA); 
} 

}

public class GameScreen implements Screen { 

MainGame game; 
SpriteBatch batch; 
public static OrthographicCamera camera; 

public GameScreen(MainGame game) 
{ 
    this.game = game; 
    float height = Gdx.graphics.getHeight(); 
    float width = Gdx.graphics.getWidth(); 

    camera = new OrthographicCamera(width, height); 
    camera.setToOrtho(false); 

    batch = new SpriteBatch(); 

    GameManager.initialize(width, height); 

    Gdx.input.setInputProcessor(new InputManager(camera)); 

} 

@Override 
public void show() { 

} 

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


    batch.setProjectionMatrix(camera.combined); 


    GameManager.renderer.render(); 


    batch.begin(); 
    GameManager.renderGame(batch); 
    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() { 
    batch.dispose(); 
    GameManager.dispose(); 

} 

}

Я надеюсь, вы можете помочь, я искал на сайте, чтобы найти ту же проблему, но я не смог ..

+2

Если вы не получите полезный ответ на свой вопрос, обратите внимание, что сеть Stack биржи имеет сообщество, посвященное игре-DEV Вопросы, связанные с, Разработка игр, где вы можете найти дополнительную помощь. См.: Http://gamedev.stackexchange.com/ – mech

+0

Спасибо, я этого не знал. –

+0

Одна вещь, которую я вижу, отличается от того, что я делаю, - я задал вид элемента управления рендерингом в моем вызове рендеринга, так что это происходит каждый цикл рендеринга. Существует еще один пример https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/superkoalio/SuperKoalio.java –

ответ

0
static TiledMap map; 

Определим путь к файлу карты в классе GameConstants:

public static final String level1 = "data/maps/level1.tmx"; 

в очередь на карту для загрузки, добавьте следующие строки кода к loadAssets() метод из GameManager до finishedLoading() метода вызова:

// set the tiled map loader for the assetmanager 
assetManager.setLoader(TiledMap.class, new TmxMapLoader(new 
InternalFileHandleResolver())); 
//load the tiled map 
assetManager.load(GameConstants.level1, TiledMap.class); 
//blocking method to load all assets 
assetManager.finishLoading(); 

Теперь вы можете получить экземпляр карты загружены в метод инициализации(): loadAssets();

// get the map instance loaded 
map = assetManager.get(GameConstants.level1); 

Для отображения карты нам необходим визуализатор карты. Поскольку мы используем ортогональное отображение, OrthogonalTiledMapRenderer из пакета Tiled подходит для этой цели . Объявить его экземпляр в классе GameManager:

public static OrthogonalTiledMapRenderer renderer; 
// map renderer