船在基于RTS的2D瓦片中的桥下通过


10

我正在编写基于2D切片的RTS。我想为其添加“伪3D”功能-跨河桥梁。

我还没有开始任何编码,只是试图考虑它如何适合碰撞检测模型。经过桥下的船只和经过桥上的部队最终将占据地图上的同一单元。如何防止它们发生碰撞?

是否有解决此问题的通用方法?还是我需要实现3D世界才能做到这一点?


如果您使用的是基于图块的系统,那么每次都可以添加类似“ isOccupied”的方法。只需让桥检查其下方和上方。
本杰明·丹格·约翰逊

2
如果地面单位不与水单位互动,则可以分别处理两组单位的碰撞。也许认为位于码头的船只是地面单位,允许玩家/ npc之类的互动进入该船只。
GameAlchemist 2012年

Answers:


7

您基本上必须创建第三维,尽管在最简单的情况下,它只能由两个值组成:“在地面/在桥上”和“在水/在桥下”。

可以从高级战略指挥部的工作方式中获得启发:单位占据特定的高度,只能在适合其类型的高度上移动,除非存在允许其执行其他操作的特定功能(例如飞机跑道),并且更改它们通常会花费运动点数,并且在某些高度级别上会受到惩罚。瓷砖可以被任意数量的单元占用,只要每个单元处于不同的高度水平即可。

对于ASC,级别为:

  • 空间
  • 高空(轰炸)
  • 中海拔(拦截器)
  • 地面攻击高度
  • 地面(大多数地面单位和气垫船,甚至在水上)
  • 部分淹没(潜艇)
  • 淹没的(“隐藏”潜艇)

9

您可以向每个图块添加一个简单的属性,以指定其级别。

因此,例如:

tileA.layer = 0 // Will be at the bottom
tileB.layer = 1 // Will be above level 0, on top of it. 

// Add tiles to layered list
List<List<Tile>> tiles = new List<List<Tile>>();
tiles[0].add(tileA);
tiles[1].add(tileB);

// Draw 'em in the right order!
void Draw(List<List<Tile>> tiles) {
    foreach( var listOfTiles in tiles ) {
        foreach( var tile in listOfTiles ) {
            tile.draw();
        }
}

现在,您可以根据它们的图层值对它们进行排序,然后将它们绘制在底部->顶部!这将使您看起来在游戏中具有一定的深度。大多数切片引擎都支持此功能。您可以添加的另一件很酷的事情是纹理的透明度,这样您就可以看透底层。

例如,可以使用水完成此操作-想象一下在lvl 1处的水,然后在lvl 0处的海底。如果水的纹理有些透明,您将能够从上方看到海底。


@aleguna不用担心!帮忙很有趣。:)
Zolomon 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.