0

キャラクター動くメッセンジャーを作っています

(メッセンジャーに見える2Dタイルマップゲーム)

各タイルで、どのキャラクターがオンになっているかを参照したい。

つまり、私のプログラムは、文字の x、y 座標ごとに参照する必要があります。

各タイルにキャラクター obj 構造用のスペースを確保してみました。

この方法の良い点は、各文字を x,y 座標で参照できることです。

しかし、キャラクターをここに移動させるのはかなり困難でした。

オブジェクトをここからそこにコピーし、元の xy 座標のオブジェクトを削除します

最後に、obj コントロール ポインター (制御用) を元の x、y のオブジェクトから dest x、y のオブジェクトに変更します。

それはそれほど単純でも、制御も簡単でも、メモリの節約でもありません。

だから私は2番目の方法を検討します。

tile 配列と obj 配列があります。

オブジェクトをレンダリングするときは、オブジェクトの x、y を参照してください。

ユーザーがオブジェクトを移動したい場合は、x、y を変更するだけです。

しかし、obj を参照するときに問題が発生した場合は、

obj 配列全体を検索する必要があります。

私の質問はこれです。

2D タイル マップで文字 (obj) を制御するための良い方法はありますか?

任意の提案をいただければ幸いです。

4

1 に答える 1

1

プログラミング言語を指定しなかったので、例では C# を使用します。

マップ上に存在する文字やその他のオブジェクトは、通常、2D 配列ではなく、別のリストに格納されます。各文字は、独自の x 座標と y 座標を格納します。何かのようなもの:

class Character
{
    int x, y;

    public int X
    {
        get{ return x; }
        set{ x = value; }
    }

    public int Y
    {
        get{ return y; }
        set{ y = value; }
    }

}

そして、それらを次のようなリストに保存します。

List<Character> characters = new List<Character>();

特定のタイルで文字を見つける必要がある場合は、次のようにします (おそらく 1 行でこれを行う linq の方法がありますが、これは理解しやすく読みやすいです)。

int searchX = 10;
int searchY = 15;
Character characterOnLocation = null;
foreach(Character character in characters)
{
    if(character.X == searchX && character.Y == searchY)
    {
        characterOnLocation = character;
        break;
    }
}

draw メソッドは地形タイルをループして (おそらく既に行っているように)、Character 配列をループして、独自の X 座標と Y 座標を使用して描画します。次のようなもの (この例では XNA を使用):

foreach(Character character in characters)
{
    spriteBatch.Draw(texture, character.X, character.Y);
}
于 2011-08-29T01:59:58.850 に答える