在 LibGDX 中访问特定单元格的磁贴
Accessing A Specific Cell's Tile In LibGDX
我已经开始使用平铺地图编辑器中的地图(32x32 8 像素图块)在 LibGDX 中创建 2D 游戏。在 generateMushrooms 方法中,我想访问第 1 层中的单元格 (1,2) 并将其图块设置为图块集中 sprites.png 中 ID 为 8 的另一个图块。我将如何实现这一点?现在我得到一个空指针异常。
public void create() {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
camera = new OrthographicCamera();
camera.setToOrtho(false, 256, 256);
camera.update();
tiledMap = new TmxMapLoader().load("custom.tmx");
tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap);
generateMushrooms();
Gdx.input.setInputProcessor(this);
sb = new SpriteBatch();
texture = new Texture(Gdx.files.internal("badlogic.jpg"));
sprite = new Sprite(texture, 50, 50);
}
@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
tiledMapRenderer.setView(camera);
tiledMapRenderer.render();
sb.setProjectionMatrix(camera.combined);
sb.begin();
//sprite.draw(sb);
sb.end();
}
public void generateMushrooms() {
//Get first layer
TiledMapTileLayer layer = (TiledMapTileLayer) tiledMap.getLayers().get(1);
// Get cell at row 1 column 2
TiledMapTileLayer.Cell cell = layer.getCell(1, 2);
// Get Tileset
TiledMapTileSet tileSet = tiledMap.getTileSets().getTileSet("sprites.png");
//Set tile of id 8 for the cell
cell.setTile(tileSet.getTile(8));
//Set the cell back in the layer at their x and y positions
layer.setCell(8, 16, cell);
}
解决了我的问题!我有一个遍历 for 循环遍历图块并像这样替换某些图块(请注意 cur
是地图中的一个图层)。
for(int i=0; i < row; i++)
{
for(int j=0; j < column; j++)
{
cell = cur.getCell(i, j);
cur.setCell(i * 8, j * 8, cell);
cell.setTile(new StaticTiledMapTile("Some type of TextureRegion/Texture");
}
}
我已经开始使用平铺地图编辑器中的地图(32x32 8 像素图块)在 LibGDX 中创建 2D 游戏。在 generateMushrooms 方法中,我想访问第 1 层中的单元格 (1,2) 并将其图块设置为图块集中 sprites.png 中 ID 为 8 的另一个图块。我将如何实现这一点?现在我得到一个空指针异常。
public void create() {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
camera = new OrthographicCamera();
camera.setToOrtho(false, 256, 256);
camera.update();
tiledMap = new TmxMapLoader().load("custom.tmx");
tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap);
generateMushrooms();
Gdx.input.setInputProcessor(this);
sb = new SpriteBatch();
texture = new Texture(Gdx.files.internal("badlogic.jpg"));
sprite = new Sprite(texture, 50, 50);
}
@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
tiledMapRenderer.setView(camera);
tiledMapRenderer.render();
sb.setProjectionMatrix(camera.combined);
sb.begin();
//sprite.draw(sb);
sb.end();
}
public void generateMushrooms() {
//Get first layer
TiledMapTileLayer layer = (TiledMapTileLayer) tiledMap.getLayers().get(1);
// Get cell at row 1 column 2
TiledMapTileLayer.Cell cell = layer.getCell(1, 2);
// Get Tileset
TiledMapTileSet tileSet = tiledMap.getTileSets().getTileSet("sprites.png");
//Set tile of id 8 for the cell
cell.setTile(tileSet.getTile(8));
//Set the cell back in the layer at their x and y positions
layer.setCell(8, 16, cell);
}
解决了我的问题!我有一个遍历 for 循环遍历图块并像这样替换某些图块(请注意 cur
是地图中的一个图层)。
for(int i=0; i < row; i++)
{
for(int j=0; j < column; j++)
{
cell = cur.getCell(i, j);
cur.setCell(i * 8, j * 8, cell);
cell.setTile(new StaticTiledMapTile("Some type of TextureRegion/Texture");
}
}