XNA 4.0: как удалить текст после вывода на экран?

Всем добрый день.

Пытаюсь нарисовать текст "Pass Complete!" для экрана с этим кодом:

spriteBatch.DrawString(font, "PASS COMPLETE!", new Vector2(30, 130), Color.White);

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

Спасибо за любую помощь.

Обновление:

protected override void Draw(GameTime gameTime)

У меня есть оператор IF, включенный здесь. По сути, он проверяет коллизию с p_Receiver и, если логическое значение проверяется, рисует DrawString. Может, мне посмотреть на это под другим углом?

Окончательный вариант:

Я пошел дальше со следующим ответом, и он работает лучше, чем раньше. :)

if (PassInfo == 3) {
(timer code)
(IF timer not "used up" then run the draw)

Пока работает хорошо.

Я признателен за это.


person AriesTiger    schedule 07.07.2014    source источник


Ответы (2)


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

function addText(text,position,duration)
    texts.add(new t(text,position,duration))
end function

function updateText()
    for each t as text in texts.findall(where t.active)
        t.duration -= 1
        if t.duration < 0 then t.active = false
    next
end function

function drawText()
    for each t as text in texts.findall(where t.active)
        //draw it
    next
end function

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

person Davor Mlinaric    schedule 08.07.2014

Многие игры перерисовывают все окно / экран каждый раз в течение цикла отрисовки, поэтому есть явный шанс, что решение для его удаления состоит в том, чтобы просто прекратить его отрисовку.

то есть ваше условие if not рисует текст, когда он больше не требуется.

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

person lzcd    schedule 07.07.2014
comment
Итак, должен ли я затем настроить блок на экране для обновления экрана и закрасить его? Это достаточно просто, так как у меня есть фон Color.DarkGreen. - person AriesTiger; 08.07.2014
comment
Для приложений XNA начального уровня довольно необычно перерисовывать только части экрана. Гораздо более вероятно, что ваше приложение перерисовывает весь экран в каждом цикле отрисовки. Можете ли вы поставить точку останова в своем вызове spriteBatch.DrawString(...), чтобы подтвердить это в любом случае? Если он действительно перерисовывается каждый раз, то простой ответ заключается в том, что для его удаления вам просто нужно перестать его рисовать. - person lzcd; 08.07.2014
comment
Вы правы, он перерисовывается снова и снова в цикле. Так что я должен добавить еще один чек, я предполагаю? Может быть, оператор while? - person AriesTiger; 08.07.2014
comment
Не требуется оператор while. Вам просто нужно изменить условие if, которое окружает вызов drawstring, чтобы он не рисовал строку после того, как вам больше не нужно ее отображать. - person lzcd; 08.07.2014
comment
Спросите себя, каково условие, чтобы определить, когда текст больше не должен отображаться (например, через 2 секунды после его первоначального появления на экране, когда объекты больше не соприкасаются и т. д.). Затем отрегулируйте и дважды проверьте, что ваше условие if правильно определяет такие вещи. - person lzcd; 08.07.2014
comment
Теперь я понимаю лучше. Я признателен за это! - person AriesTiger; 08.07.2014