Blitz Creatures
Главная » Статьи » C# and XNA

Всплывающие сообщения
Пример
   
   Итак приступим. Возьмём для экспериментов уже существующий проект, или создадим новый. Как создавать новый проект в XNA я думаю вы знаете.
   Далее добавим в игру новый класс. В Visual Studio это удобнее сделать так: щелчок правой кнопкой мыши на проекте в Solution Explorer и выбрать пункт "Add>Class...". Дадим ему название. Я назвал MessageStream.
   Внутри класса создаём основу для сообщений - коллекцию строковых переменных.


 List<string> stream = new List<string>();
 List<int> time = new List<int>();

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

 Color messColor=Color.White;  // Цвет сообщений
 SpriteFont font;              // Шрифт
 int height = 0;               // Размер пробелов между строками
 int maxTime = 100;            // Максимальное время

   Объявляем конструктор класса. В нем нет ничего сложного. Просто получаем от пользователя данные и сохраняем внутри класса в соответствующие переменные.
   Конструктор:

 public MessageStream(int x,int y, int messageTime, SpriteFont messageFont, Color messageColor)
 {
      Vector2 size;  // используем для рассчета высоты заданного шрифта
      pos.X = x;
      pos.Y = y;
      messColor = messageColor;
      font = messageFont;
      maxTime = messageTime;
      // рассчет высоты шрифта по букве "А"
      size = font.MeasureString("A");
      height = (int)size.Y;
 }

   Вот собственно и все. Теперь определяем члены класса. Добавим функцию для собственно добавления сообщений в готовый класс.

 public void Add(string message)
 {
      stream.Insert(0,message); // вставляем сообщение в коллекцию в позиции 0 (начало)
      time.Insert(0, maxTime);  // добавляем счетчик времени для него в коллекцию time
 }

   Функция обновления потока сообщений. Необходимо уменьшать время существующих сообщений и удалять "устаревшие":

 public void Update()
 {
      int c = 0;
      // прокручиваем весь список
      for (c = 0; c < stream.Count; c++)
      {
          time[c]--;
          // время вышло?
          if (time[c] < 0)
          {
              time.Remove(time[c]);
              stream.Remove(stream[c]);
              // шаг назад. ведь цикл постоянно увеличивает с,
              // а после удаления элемента, список сдвигает последующие элементы
              // и значит появляется новый элемент номер с номером с.
              c--;
          }
      }
 }

   Функция вывода списка на экран:

 public void Draw(SpriteBatch spriteBatch)
 {
     int c = 0;
     // Обновление списка будем вызывать перед отрисовкой
     this.Update();
    
     for (c = 0; c < stream.Count; c++)
     {
         messColor.A = Convert.ToByte((float)time[c]*1.6f); 
         // постепенное затухание
         spriteBatch.DrawString( font,
              stream[c],
              new Vector2(pos.X, pos.Y-c *(height)),
              messColor);
     }
 }

   Вот и все! Сохраняем проект и радуемся жизни!
   Для того чтобы пользоваться готовым классом, необходимо сначала создать его экземпляр. Нужен один поток сообщений - объявляйте один экземпляр, два потока - два экземпляра, и т.д.

 MessageStream messStream;

   Далее, после загрузки подходящего шрифта (в моем случае - hudFont), инициализируем созданный экземпляр, например, в блоке LoadContent:

 messStream = new MessageStream(20,500,100,hudFont,Color.Orange);

   Теперь, если понадобиться вывести сообщение на экран, в коде игры пишем:

 messStream.Add("В бой вступает Syntax!");

   Этот класс можно трансформировать, добавить удобные команды и свойства.
   Если что-то не ясно - спрашивайте. Я могу дополнить или изменить урок.
Категория: C# and XNA | Добавил: NightOwl (17.06.2010) | Автор: FireOwl
Просмотров: 2827 | Теги: C#, xna, visual studio, Туториал, Урок | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Меню сайта
Поиск по сайту
Категории раздела
C# and XNA [3]
Статьи по программированию в среде С# с использованием графики XNA. Делюсь своим опытом. =D
Blitz3D and Xors3D [0]
Можно было бы добавить PhysX, но он недавно перестал поддерживаться, и появилась встроенная физика в Xors3D.
Объявления
Облако тегов
Друзья сайта
  • Блог разработчика
  • Java игры
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Copyright FireOwl Team © 2018
    Создать бесплатный сайт с uCoz