2013-09-17 2 views
1

Я попытался нарисовать Texture2D s в строке, добавив координаты x и y, когда она дойдет до конца экрана. Метод Draw не рисует несколько спрайтов, он просто перемещает первый на скорости 20 вместо того, чтобы рисовать каждые 20 пикселей.Autodraw Texture2D без повторной записи нескольких строк

protected override void Draw(GameTime gameTime) 
{ 
    GraphicsDevice.Clear(Color.White); 

    // TODO: Add your drawing code here 
    spriteBatch.Begin(); 
    spriteBatch.DrawString(GameText, MenuText, new Vector2(325,75), Color.Red); 

    do 
    { 
     spriteBatch.Draw(EarthGrass, place, Color.White); 
     place.X += 20; 
    } while (place.X < 800); 
    place.X = -20; 
    place.Y += 20; 
    do 
    {     
     int IDBint = IDB.Next(11); 
     if (IDBint == 10) 
     { 
      spriteBatch.Draw(PooperMachoOre, place, Color.White); 
     } 
     else 
     { 
      spriteBatch.Draw(EarthDirt, place, Color.White); 
     } 
     place.X += 20; 

    } while (place.X < 800); 
    place.X = -20; 
    place.Y += 20; 
    spriteBatch.End(); 
    base.Draw(gameTime); 
} 

ответ

0

Ваш код отлично выглядит на первый взгляд, хотя я в настоящее время ячменя вижу циклы. Я предполагаю, что вы хотите STOP рисовать после того, как позиция X равна больше, чем 460 пикселей, так как она начинается с 0. Так что просто переверните свой > на <, вам также нужно будет сбросить положение X каждого кадра, иначе оно будет начните с того места, где оно остановилось.

do 
{ 
    place.X += 20; 
    spriteBatch.Draw(EarthGrass, place, Color.White); 
} while (place.X > 460); 
place.X = 0; 
+0

Это работало так, как я этого хотел. Я планировал, чтобы он автоматически нарисовал мир, чтобы позже добавить свой алгоритм генерации в мире, а также те блоки, которые он будет генерировать. –

+0

А также как работает метод рисования, когда вы возвращаете его на 0? если вы не обновляете эту переменную? –

+0

Метод draw вызывается много раз в секунду вместе с методом обновления (обычно 60 кадров в секунду), каждый кадр должен сбросить место, чтобы следующий кадр мог правильно рисовать. В XNA вы должны перерисовать все кадры, иначе он будет очищен (есть разные способы, но это основы его) – Cyral

0

Если вы:

do 
{     
    int IDBint = IDB.Next(11); 
    if (IDBint == 10) 
     spriteBatch.Draw(PooperMachoOre, place, Color.White); 
    else 
     spriteBatch.Draw(EarthDirt, place, Color.White); 

    place.X += 20; 

} while (place.X < 800); 

ваш Draw изменит всю последовательность изображений, чтобы рисовать каждый кадр (и как Cyral писал, это происходит 60 раз в секунду).
Вам не нужно называть ваш случайный генератор в методе Draw, но вы должны установить последовательность текстур для рисования только один раз. Например, в Initialize.

Смежные вопросы