2016-04-10 21 views
1

私のゲームにいくつかのタイルをロードする際に問題が発生しています。私のゲーム世界は現在770x450のピクセルサイズを持っています。私は位置(0, 330)に1つのタイルをロードしましたが、(770, 330)に達するまで、x軸に沿ってタイルをコピーしてロードするループを作成します。コードをコピーしてコードを貼り付けて、各タイルを別々に読み込むことはできますが、それは悪いコードになります。私のタイルがTexture2D gameTile;として宣言されてMonogame - Loading Tiles

protected override void Initialize() 
{ 
    position = new Vector2(0, 330); 

    // x axis = 770 pixel 
    // y axis = 450 pixels 

    this.IsMouseVisible = true; 
    base.Initialize(); 
} 

は、ここに私の現在のInitialize()コードです。

答えて

2

http://xnaresources.com/default.asp?page=Tutorial:TileEngineSeries:1

そのリンクを使用すると、タイルエンジンを作成する必要があります何のほとんどをカバーしてチュートリアルを提供します。

アプリケーションの初期化機能内にタイルを作成しているようです。必要なすべてのタイルを格納するタイルマネージャーを作成する方がよいでしょう。

タイルの作成に関しては、構造体の配列または構造体の配列を使用できます。最初のものについては、少なくともタイルの位置を格納するTileクラスを作成します。スプライトシートを使用してタイルをレンダリングする場合は、描画に使用するタイルを決定するためにTileIDを含めることもできます。

構造体の配列の場合、(Tile Manager内の)タイルに使用されるベクターの配列と、TileIDの別の配列を格納できます。両方の方法が機能します。わかりやすく、オブジェクト指向プログラミングを練習するためには、おそらく最初の方をお勧めします。

Texture2Dも一度だけ読み込む必要があります。ローディングを行う場所やタイルを作成する方法を投稿しないので、それぞれのタイルのtexture2Dを読み込む計画があると仮定しています。これは悪い考えです。

最後に、あなたはあなたのタイルクラスが作られたら、ループの観点から、あなたのタイルマネージャまたは貫通ループは各タイルの位置を作成して設定します機能を初期化する(擬似コード)で:次に

int tileRowCount = mapSizeX/tileSizeX; 
int tileColumnCount = mapSizeY/tileSizeY; 

for(int rowIndex = 0; rowIndex < tileRowCount; rowIndex++) 
{ 
    for(int columnIndex = 0; columnIndex < tileColumnCount; columnIndex++) 
    { 
     tileList.Add(new Tile(new Vector2(columnIndex * tileSizeX, rowIndex * tileSizeY); 
    } 
} 

用図:

foreach(Tile tile in tileList) 
{ 
    ///not exact Draw call, not looking at the documents right now 
    tile.Draw(spriteBatch, tileTexture, tile.Position); 
} 

これは私があなたの後ろにいると思うものの要点です。私が間違った道を歩いているなら、私は答えを適応させることを教えてください。私はいくつかのより詳細な内容を読み飛ばしましたが、問題がある場合はリンクがあり、さらに質問することができます。

EDITED:描画部分がコード形式ではありません