for(Rectangle tile: tiles) {
if(koalaRect.overlaps(tile)) {
// we actually reset the koala y-position here
// so it is just near the tile we collided with
// this removes bouncing :)
if(koala.velocity.y > 0) {
koala.position.y = tile.y - Koala.HEIGHT;
// we hit a block jumping upwards, let's destroy it!
TiledMapTileLayer layer = (TiledMapTileLayer)map.getLayers().get(1);
layer.setCell((int)tile.x, (int)tile.y, null);
} else {
koala.position.y = tile.y + tile.height;
// if we hit the ground, mark us as grounded so we can jump
koala.grounded = true;
}
koala.velocity.y = 0;
break;
}
}
此代码来自superkoala。
我想要的是当考拉/英雄与墙/瓦碰撞时,它会检查瓷砖。然后我想将瓷砖更改为3种形式。一块坚固的瓷砖,一块略微破裂的瓷砖,一块非常脆弱的瓷砖,最后将它摧毁。
示例
switch(layer){
"SolidLayer": TiledMapTileLayer layer = (TiledMapTileLayer)map.getLayers().get(3);
//get cracked tile
layer.setCell((int)tile.x, (int)tile.y, null);
"CrackLayer": TiledMapTileLayer layer = (TiledMapTileLayer)map.getLayers().get(2);
//get fragile tile
layer.setCell((int)tile.x, (int)tile.y, null);
"FragileLayer": TiledMapTileLayer layer = (TiledMapTileLayer)map.getLayers().get(1);
//get destroyed layer
layer.setCell((int)tile.x, (int)tile.y, null);}
这可能吗?
答案 0 :(得分:0)
在编辑器中创建对象,并使用 MapObjects 在代码中使用这些对象。
你可以从这些对象中获得适当的界限,你可以在你的代码中使用它们。
使用此链接解决您的疑问
https://code.google.com/p/libgdx/wiki/GraphicsTileMaps
一件重要的事情
只有在使用LibGdx 0.9.9
时才会帮助您答案 1 :(得分:0)
不是将单元格设置为null,而是将其设置为应该占用该空间的新图块(如果前一个图块是实心的,则将其设置为已破解,如果它已被破解,则将其设置为null)。那你就不需要多层了。
像这样。
TiledMapTileLayer layer = (TiledMapTileLayer)map.getLayers().get(1);
TiledMapTileLayer.Cell cell = layer.getCell((int)tile.x, (int)tile.y);
TiledMapTile tile = cell != null ? cell.getTile() : null;
if (tile != null) {
switch (tile.getId()) {
case TILE_SOLID:
cell.setTile(crackedTile);
break;
case TILE_CRACKED:
cell.setTile(null);
break;
}
}