Java LibGdx平铺贴图渲染问题
我正试图学习一本书来学习LibGDX游戏引擎,但我在渲染平铺贴图时遇到了一个问题。我想我用这本书写了同样的代码,但我不能得到同样的结果 这是一个带有角色和地图的简单游戏。当我渲染我的角色和背景时,没有问题 它看起来像这样 但在我添加tmx地图后,屏幕上只显示游戏的一部分,没有地图。。 我不知道怎么解决这个问题。。我真的很困惑 这些是我的GameManager和ScreenManager类,也许你能找出我做错了什么Java LibGdx平铺贴图渲染问题,java,libgdx,tiled,Java,Libgdx,Tiled,我正试图学习一本书来学习LibGDX游戏引擎,但我在渲染平铺贴图时遇到了一个问题。我想我用这本书写了同样的代码,但我不能得到同样的结果 这是一个带有角色和地图的简单游戏。当我渲染我的角色和背景时,没有问题 它看起来像这样 但在我添加tmx地图后,屏幕上只显示游戏的一部分,没有地图。。 我不知道怎么解决这个问题。。我真的很困惑 这些是我的GameManager和ScreenManager类,也许你能找出我做错了什么 public class GameManager { static Tile
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);
}
}
}
我希望你们能帮助我,我在网站上搜索了同样的问题,但我找不到
static TiledMap map;
让我们在GameContents类中定义映射文件的路径:
public static final String level1 = "data/maps/level1.tmx";
要将映射排队以进行加载,请将以下代码行添加到loadAssets()方法
在finishedLoading()方法调用之前的GameManager:
// 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();
现在,您可以将映射实例加载到initialize()方法中:
loadAssets()
要渲染贴图,我们需要一个贴图渲染器。因为我们使用的是正交映射,
贴片包装中的正交贴片机适用于此
目的。在GameManager类中声明其实例:
public static OrthogonalTiledMapRenderer renderer;
// map renderer
如果您的问题在这里没有得到有用的答案,请注意,Stack Exchange网络有一个专门讨论游戏开发相关问题的社区,即游戏开发,您可以在那里找到更多帮助。请参阅:谢谢,我不知道。我看到的与我所做的不同的一件事是,我在渲染调用中设置了平铺贴图渲染器的视图,以便它在每个渲染周期都发生。还有另一个示例,我非常确定它必须在render调用中,因为它使用相机的当前投影矩阵。因此,如果摄影机位置发生变化,则需要确保在平铺贴图渲染器上再次设置摄影机位置。我尝试过,但结果相同。。无论如何,谢谢你。。
// get the map instance loaded
map = assetManager.get(GameConstants.level1);
public static OrthogonalTiledMapRenderer renderer;
// map renderer