1
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);}

这是可能的吗?

4

2 回答 2

0

不要将单元格设置为空,而是将其设置为应该占据该空间的新瓷砖(如果前一个瓷砖是实心的,则将其设置为已破裂,如果已破裂,请将其设置为空)。然后你不需要多层。

像这样的东西。

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;
    }
}
于 2013-07-03T16:17:49.447 回答
0

在编辑器中创建对象并使用MapObjects在代码中使用这些对象。

您可以从这些对象中获得适当的界限,并且可以在代码中使用它们。

使用此链接解决您的疑问

https://code.google.com/p/libgdx/wiki/GraphicsTileMaps

一件重要的事

仅当您使用 LibGdx 0.9.9 时,这才会对您有所帮助

于 2013-07-03T14:36:03.777 回答