c # xna метод рисования карты разработки игр - PullRequest
0 голосов
/ 23 ноября 2010

В данный момент я занимаюсь разработкой игры на C #, и я немного застрял.

Мне нужно нарисовать карту тайлов.Я читаю карту тайлов с использованием 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++;
         }
    }

Я думал, что это сработает, и карта тайлов появляется на экране, но затем быстро исчезает, есть идеи, что я делаю неправильно?извините, если это действительно глупо.

спасибо, Iain

1 Ответ

1 голос
/ 23 ноября 2010

Похоже, что в случае неправильно переведенного цикла: -)

j не объявлено в методе, который вы опубликовали, поэтому я предполагаю, что это поле экземпляра типа int, инициализированное 0Он должен быть повторно инициализирован на 0 каждый раз перед циклом , иначе j < numTiles будет ложным на каждом кадре, кроме первого (поэтому плитки будут рисоваться только на первом кадре - посколькуэкран стирается в начале каждого кадра, плитки исчезают, если они не перерисовываются постоянно).

Кроме того, почему вы умножаете положение каждой плитки на ее размер (в каждом кадре, тоже!)?Это быстро приведет к тому, что плитки будут вытянуты за пределы экрана после нескольких кадров, поскольку их позиции будут экспоненциально увеличиваться с количеством нарисованных кадров.Если плитки не движутся, их положение вообще не нужно изменять (а если они движутся, это следует делать в методе Update, а не Draw).

Наконец, обязательно прокомментируйтеВызов Console.WriteLine, когда вы закончите отладку, поскольку запись в консоль (несколько раз в секунду) довольно медленная.

...