Im пытается изучить книгу, чтобы узнать игровой движок LibGDX, но у меня проблема с отображением черепичных карт. я думаю, что написал тот же код с книгой, но я не смог получить тот же результат.LibGdx Tiled Map Rendering Issue
его простая игра с символом и картой. Когда я отобразил свой персонаж и фон, проблем не было.
его вид:
http://i66.tinypic.com/nb97nq.png
, но после того, как я добавить мой TMX экран карты показывает только какую-то часть игры и без карты .. я не знаю, как это исправить .. им действительно путают.
те мои 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();
}
}
Я надеюсь, вы можете помочь, я искал на сайте, чтобы найти ту же проблему, но я не смог ..
Если вы не получите полезный ответ на свой вопрос, обратите внимание, что сеть Stack биржи имеет сообщество, посвященное игре-DEV Вопросы, связанные с, Разработка игр, где вы можете найти дополнительную помощь. См.: Http://gamedev.stackexchange.com/ – mech
Спасибо, я этого не знал. –
Одна вещь, которую я вижу, отличается от того, что я делаю, - я задал вид элемента управления рендерингом в моем вызове рендеринга, так что это происходит каждый цикл рендеринга. Существует еще один пример https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/superkoalio/SuperKoalio.java –