2010-11-23 12 views
0

私はCでゲームを開発していて、ちょっと立ち往生しています。c#xnaゲーム開発タイルマップ描画方法

タイルマップを描画する必要があります。私はxmlを使ってタイルマップを読み、各タイルをそのxとyの位置のリストに格納します。しかし、私は描く方法に少し問題があります。

 public void Draw(SpriteBatch theBatch) 
    { 
     int tileWidth = 32; 
     int tileHeight = 32; 
     int numTiles = 100; 
     while (j < numTiles) 
     { 
      tileMap[j].Position.X *= tileWidth; 
      tileMap[j].Position.Y *= tileHeight; 
      theBatch.Draw(mSpriteTexture, tileMap[j].Position, Color.White); 
      Console.WriteLine("tile drawn"); 
      Console.WriteLine("x = " + tileMap[j].Position.X); 
      Console.WriteLine("y = " + tileMap[j].Position.Y); 
      Console.WriteLine(" i = " + j); 
      j++; 
     } 
    } 

私はこれが機能するだろうと思ったとタイルマップが画面に表示されますが、その後すぐに消え、私が間違っているの何任意のアイデア?本当に愚かな場合はごめんなさい。

おかげで、イアン

答えて

1

jあなたが投稿メソッド内で宣言されていません:-)ループについて誤訳の事例のように見えるので、私はそれが初期化タイプintのインスタンスフィールドだと仮定しています0から0に再設定する必要があります。の前に毎回0に再設定されたでなければなりません。最初のフレームを除いてすべてのフレームでj < numTilesがfalseになります(タイルは最初のフレームのみ描画されます。各フレームの始めに、タイルは常に再描画されていなければ消えます)。

また、なぜ各タイルの位置にサイズを掛けているのですか(すべてのフレームでも同じです)。これにより、数フレーム後にタイルを画面外にすばやく描画することができます。描画されるフレームの数が指数関数的に増加するためです。タイルが移動していない場合は、その位置をまったく変更する必要はありません(移動する場合は、DrawメソッドではなくUpdateメソッドで行う必要があります)。

最後に、デバッグが完了したらConsole.WriteLineコールをコメントアウトしてください。コンソールへの書き込み(1秒間に数回の書き込み)はかなり遅いためです。

+0

ああ、私はそれらのサイズを掛けて、次のタイルが前のタイルの隣に描画されるようにしました。そのxとyの位置は、それが意味するのはどのタイルの列と行? – Iain

+0

助けてくれてありがとう、今でも働いているので、x/yの高さ/幅をより賢明な場所に乗じる場所を変更しました:) – Iain

+0

喜んで私は助けてくれました。これは、タイルが作成された後で一度だけ実行する必要があります – Cameron