Monogame windows - сделать прокручиваемый текстовый вид
Я пытаюсь сделать приложение в моногамных окнах. У меня есть длинный текст для отображения на экране. Я попытался отобразить его на экране с помощью spriteBatch.Drawstring, в какой-то степени это было успешно. Но текст не вписался в необходимую область. Я следовал этому уроку. Мне нужно реализовать вертикальную прокрутку, чтобы весь текст находился внутри нужной мне области. Может кто-нибудь предложить некоторую помощь. Это мой текущий код:
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
_boxTexture = new SolidColorTexture(GraphicsDevice, Color.Red);
_borderRectangle = new Rectangle(100, 100, 500, 500);
_textboxRectangle = new Rectangle(105, 105, 490, 490);
_font = Content.Load<SpriteFont>("Rockwell");
_text = "He determined to drop his litigation with the monastry, and relinguish his claims to the wood-cuting and fishery rihgts at once. He was the more ready to do this becuase the rights had becom much less valuable, and he had indeed the vaguest idea where the wood and river in quedtion were.";
}
private String parseText(String text)
{
String line = String.Empty;
String returnString = String.Empty;
String[] wordArray = text.Split(' ');
foreach (String word in wordArray)
{
if (font.MeasureString(line + word).Length() > textBox.Width)
{
returnString = returnString + line + '\n';
line = String.Empty;
}
line = line + word + ' ';
}
return returnString + line;
}
и внутри функции рисования:
spriteBatch.DrawString(font, parseText(text), new Vector2(textBox.X, textBox.Y), Color.White);
1 ответ
Вместо этого вы можете сделать это в методе draw. Тогда просто делайте то, что вы делаете сейчас, но вместо создания возвращаемой строки, вы просто вызываете
spriteBatch.DrawString(font, line, textPostion, Color.White);
вместо. Где textPosition просто равно позиции текстового поля, для начала, а затем вы увеличиваете позицию Y с помощью font.MeasureString(line).Y для каждой итерации:
textPosition.Y += font.MeasureString(line).Y;
Затем вы проверяете
if(font.MeasureString(line).Y + textPosition.Y < textBox.Y + textBox.Height
|| textPosition.Y > textBox.Y)
{
continue;
}
Затем просто посмотрите на ввод стрелок клавиатуры, например (или создайте несколько кнопок для прокрутки вверх и вниз), и соответственно увеличьте или уменьшите textPosition.Y. Тогда у вас будет вертикально прокручиваемое текстовое поле.
Затем вы можете сделать некоторую блокировку, определив минимальное значение Y для позиции, так что текст останавливается при прокрутке вниз или вверх.