0
public void Draw(SpriteBatch theSpriteBatch)
    {
        Random rand = new Random();
        for(int y = 0; y < map.GetLength(0); y++) {
            for(int x = 0; x < map.GetLength(1); x++) {
                theSpriteBatch.Draw(tile[rand.Next(0,3)], new Rectangle(x*tileWidth,y*tileHeight,tileWidth,tileHeight), 
                    Color.White);
            }
        }
    }

これを行うと、タイルがちらつき、常に再描画されます。一度だけ描画してランダム効果を得るにはどうすればよいですか?これらのタイルをマウスでクリックして変更する方法はありますか?また、1つのタイルを他のタイルよりも普及させる方法はありますか?

4

1 に答える 1

3

タイルをランダムに1回だけ生成し、そのランダムなシーケンスを毎回描画することを検討していると思います。XNAでは、すべての「フレーム」が実行されることを忘れないでください。Drawこれは通常、1秒に1回以上です。

現在のループを新しい領域(マップの読み込み)にコピーします。また、2Dデータ構造(配列など)を追加して、タイル生成の結果を保存します。サンプルの2D整数配列を呼び出していますtileNums。ここで、ループを現在のままにしますが、描画ではなく結果を格納するように内部を変更します。

    Random rand = new Random();
    for(int y = 0; y < map.GetLength(0); y++) {
        for(int x = 0; x < map.GetLength(1); x++) {
            tileNums[x, y] = rand.Next(0,3);
        }
    }

次に、現在のDrawループの内部を変更して、ランダムに生成されないようにし、代わりにこのデータから取得します。

    //Random object no longer needed
    for(int y = 0; y < map.GetLength(0); y++) {
        for(int x = 0; x < map.GetLength(1); x++) {
            theSpriteBatch.Draw(tile[tileNums[x, y]], new Rectangle(x*tileWidth,y*tileHeight,tileWidth,tileHeight), 
                Color.White);
        }
    }
于 2012-02-27T06:53:01.563 に答える