如何检查tile的冲突以及如何使用java和libgdx为它们添加条件

时间:2013-07-03 13:47:36

标签: java libgdx

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

这可能吗?

2 个答案:

答案 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;
    }
}