java - Java LibGDX:Tiledmap 不在顶部和右侧呈现
问题描述
我试图让一个平铺地图在整个屏幕上呈现。问题是顶部或右侧 100px,那里的一切都是黑色的。我的 tiledmap 大约有 100 个图块,所以它应该能够渲染比它渲染的更多。
这是它现在的样子:
1:和我一样,这个栏是预期的,目前,那里没有任何东西可以渲染。
2 & 3:这些条是出乎意料的,因为我的平铺地图有更多部分要在那里渲染。
我已经尝试将我的视口从 StretchViewport 更改为 FitViewport 以及 FillViewport,但这并没有改变任何东西。
这是我在 PlayScreen 类中的构造函数:
public Play(GameStateManager gsm) {
super(gsm);
//set up box2d
world = new World(new Vector2(0, -20.81f), true);
cl = new MyContactListener();
world.setContactListener(cl);
b2dr = new Box2DDebugRenderer();
//set up viewport
vw = new StretchViewport(1280, 720, cam);
cam.update();
//create player
createPlayer();
//create tiles
createTiles();
//setup box2D cam
b2dCam = new OrthographicCamera();
b2dCam.setToOrtho(false, Game.V_WIDTH / PPM, Game.V_HEIGHT / PPM);
}
这是我的 createTiles() 方法:
private void createTiles(){
loader = new TmxMapLoader();
tileMap = loader.load("data/lvl1.tmx");
tmr = new OrthogonalTiledMapRenderer(tileMap);
cam.update();
//get the size of the tiles
tileSize = tileMap.getProperties().get("tilewidth", Integer.class);
//create box2d bodies for all tiledmap layers
TiledMapTileLayer layer;
layer = (TiledMapTileLayer) tileMap.getLayers().get("red");
createLayer(layer, B2DVars.BIT_RED);
layer = (TiledMapTileLayer) tileMap.getLayers().get("orange");
createLayer(layer, B2DVars.BIT_ORANGE);
layer = (TiledMapTileLayer) tileMap.getLayers().get("yellow");
createLayer(layer, B2DVars.BIT_YELLOW);
layer = (TiledMapTileLayer) tileMap.getLayers().get("green");
createLayer(layer, B2DVars.BIT_GREEN);
layer = (TiledMapTileLayer) tileMap.getLayers().get("blue");
createLayer(layer, B2DVars.BIT_BLUE);
layer = (TiledMapTileLayer) tileMap.getLayers().get("pink");
createLayer(layer, B2DVars.BIT_PINK);
}
渲染()方法:
public void render(float delta) {
//clear screen
Gdx.gl.glClearColor(0.619607843f, 0.79607843137f, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
//set cam to follow player
cam.position.set(
player.getPosition().x * PPM + Game.V_WIDTH / 4,
Game.V_HEIGHT / 2,
0
);
//draw tile map
tmr.setView(cam);
tmr.render();
//draw player
sb.setProjectionMatrix(cam.combined);
player.render(sb);
//draw box2d world
b2dr.render(world, b2dCam.combined);
//responsive resizing
resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
}
这是我的主游戏类中的 create() 方法:
public void create () {
Gdx.input.setInputProcessor(new MyInputProcessor());
//asset managing
res = new Content();
res.loadTexture("data/player/player.png", "player");
sb = new SpriteBatch();
cam = new OrthographicCamera();
cam.setToOrtho(false, V_WIDTH, V_HEIGHT);
hudCam = new OrthographicCamera();
hudCam.setToOrtho(false, V_WIDTH, V_HEIGHT);
gsm = new GameStateManager(this);
}
我没想到这个游戏会得到那些黑条,我之前创造了其他游戏,他们从来没有得到那些。如何删除它们(图像上的 2 和 3)?
解决方案
推荐阅读
- dart - Dart - 有没有办法防止在编译时向不可变列表添加元素?
- sql-server - 从 C++ 应用程序读取 Microsoft SQL Server 数据库中 BIGINT 列的插入值的问题
- vue.js - Vue + Vuetify + Axios + Django:CRUD 数据表
- python - 创建元素大于 255 的 int32 列表的 SHA1 哈希
- node.js - 来自 expo-image-picker 的图像数据应该如何发送到 Express 和 Multer Endpoint?
- artificial-intelligence - 了解 AI 中的折线
- r - 创建数据框 R 时使用函数参数的值
- curl - 如何获取网页的html源代码
- math - 计算忽略弯曲的给定线性曲线的总长度
- python - 为什么我不能在标签中更改字体,但在按钮中我可以(Tkinter.ttk)