0

マップは、私が作成したTileというクラスの2次元配列で作成されています。各タイルの内部には、ユニットと衝突するか衝突しない小さなタイルがあります。

しかし、どうすれば衝突を検出して防ぐことができますか?プレーヤーが6x6小さい(上記の)タイルが大きく、1つの通常のタイルが8x8であるとします。プレーヤーが右に移動しているときに、タイルがそこにあることを知っていることをどのように知ることができますか?また、タイルが重ならないように十分に移動しますか?

ルールで要求されているように..私は努力を示す必要があるので、これは私がこれまでに持っているものです:プレーヤーが6x6で1タイルが8x8の場合、それはプレーヤーが1タイル上、または2タイルの間にあることを意味します; 彼がタイルの間に立っているとき(ユニットはタイルにバインドされていません)。たとえば、プレーヤーが2つのタイルの間にいて、右に移動したいとします。最初の(プレーヤーがいる2つのタイルのうち)タイルの右側のタイルの衝突をチェックしてから、2番目のタイルをチェックします。右に移動できるようにするには、両方が空である必要があります。

ただし、結合が10x10の大きさである場合、2タイル、または最大3タイルにすることができます。各ユニットのサイズが異なり、一定ではないことがわかっている場合、衝突を常にチェックするにはどうすればよいですか。

基本的に、私は上記のもの、または新しい衝突方法の助けが必要です。

4

1 に答える 1

0

If I understand your question correctly, it is the smaller tiles that cause collisions, not the larger ones. In this case, you can simply iterate through all of the small tiles the unit would cross in a given move, stopping if you encounter one that would halt the unit's progress. As an example, here is a method that would handle moving a unit right:

void moveUnitRight(Unit unit, int tilesRight)
{
    for(int col = unit.Right + 1 ; col <= unit.Right + tilesRight ; col++)
        {
            for(int row = unit.Top ; row <= unit.Bottom ; row++)
            {
                 if (tiles[row,col].Collides)  //stop unit here
                 {
                     unit.Right = col - 1;    //set position to tile left of collision
                     return;   //search no further
                 }
            }
     }
     //if you reach this point, no collision was detected
     unit.Right += tilesRight;    //move the full distance
}

Once you understand this, you could write a more robust method that handles movement in any direction as well as checking for map boundaries.

于 2013-03-23T18:31:11.263 に答える