1

タイルごとに個別のケースを作成する代わりに、これを行うためのより良い方法は何でしょうか?

public void Draw(SpriteBatch spriteBatch, Level level)
    {
        for (int row = 0; row < level._intMap.GetLength(1); row++) {
            for (int col = 0; col < level._intMap.GetLength(0); col++) {
                switch (level._intMap[col, row]) {
                    case 0:
                        spriteBatch.Draw(_texture, new Rectangle(row * _tileWidth, col * _tileHeight, _tileWidth, _tileHeight), new Rectangle(0 * _tileWidth, 0 * _tileHeight, _tileWidth, _tileHeight), Color.White);
                        break;
                    case 1:
                        spriteBatch.Draw(_texture, new Rectangle(row * _tileWidth, col * _tileHeight, _tileWidth, _tileHeight), new Rectangle(1 * _tileWidth, 0 * _tileHeight, _tileWidth, _tileHeight), Color.White);
                        break;
                    case 2:
                        spriteBatch.Draw(_texture, new Rectangle(row * _tileWidth, col * _tileHeight, _tileWidth, _tileHeight), new Rectangle(2 * _tileWidth, 0 * _tileHeight, _tileWidth, _tileHeight), Color.White);
                        break;
                    case 3:
                        spriteBatch.Draw(_texture, new Rectangle(row * _tileWidth, col * _tileHeight, _tileWidth, _tileHeight), new Rectangle(3 * _tileWidth, 0 * _tileHeight, _tileWidth, _tileHeight), Color.White);
                        break;

                }
            }
        }
    }
4

2 に答える 2

6

caseステートメントは必要ありません。変数を使用するだけです。

var n = level._intMap[col, row];
spriteBatch.Draw(_texture, 
    new Rectangle(row * _tileWidth, col * _tileHeight, _tileWidth, _tileHeight), 
    new Rectangle(n * _tileWidth, 0 * _tileHeight, _tileWidth, _tileHeight), Color.White
);

(caseステートメントの効果のように)出力を値0〜3に制限する必要がある場合は、条件付きを使用するのが最適if (n >= 0 && n <= 3) { }です。

于 2012-09-27T02:21:58.687 に答える
1

このようなことをする良い方法は、「タイル」クラスを作ることだと思います。クラスには、テクスチャのTexture2Dプロパティを含めることができます。次に、ゲームのdrawメソッドで呼び出されるdrawメソッドをTileクラスに設定します。

Levelクラスには、整数ではなくタイルの配列を含めることができます。

次に、Draw呼び出しは次のようになります。

public void Draw(SpriteBatch spriteBatch, Level level)
    {
        for (int row = 0; row < level.tileMap.GetLength(1); row++) {
            for (int col = 0; col < level.tileMap.GetLength(0); col++) {
                level.tileMap[col, row].Draw(spriteBatch);;
            }

        }
    }
于 2012-09-27T18:10:35.303 に答える