2016-07-02 3 views
1

TiledMap mapには、「wall」、「door」、「spike」などのオブジェクトレイヤーがあります...
各レイヤーは特定の位置に矩形のみを持っています。libGDX TiledMap:特定のセルにオブジェクトが存在するかどうかを確認する

タイルレイヤーの特定のセルに特定のオブジェクトレイヤーのオブジェクトが含まれているかどうかを確認するにはどうすればよいでしょうか?

(x、y)にタイル層の細胞が、対象層「壁」からオブジェクトが含まれている場合のような何かを行うには、「そこに移動することはできません」と言います。


私はちょうどlibGDXやタイルを使用し始めた、と私は考えることができる。このような何かを検出する現在の方法は、これらすべての長方形を作成することと、彼らがプレーヤーの長方形とするたびにプレイヤーの動きをオーバーラップするかどうかを確認します次のセルに転送します。

しかし、それはすべての単一のオブジェクトをチェックされるだろう、と私はプレイヤーが現在ある一つのセルをチェックする必要があります。

答えて

1

一つの方法あなたは(計算を減らすこの唯一の作品の壁/ドア/などの場合があります。すべて静的であり、移動も変形もしません)は、2次元配列のブール値(基本的にはTiledMap)をtrueにして、タイルがブロックされていることを意味します。擬似コードで

:今

// Initially all grid cells are un-blocked 
boolean[][] gridBlockedByWall = new boolean[MAP_HEIGHT][MAP_WIDTH]; //Replace with your grid size 

// Loop over each wall and set array (change depending on your implementation) 
for (Rectangle wall: walls) { 

    // Here we run over every wall and column covered by this rectangle and set it as blocked 
    for (int row = wall.y; row < wall.y + wall.height; row++) { 
     for (int col = wall.x; col < wall.x + wall.width; col++) { 
      gridBlockedByWall[row][col] = true; 
     } 
    } 
} 

位置(x, y)は単に一定の時間で実行されますgridBlockedByWall[y][x]を行う壁によってブロックされているかどうかをテストします。

関連する問題