Четверг, 21 Ноября 2024, 22:33

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Правильное смещение строк при отрисовке в журнале событий
GrannerДата: Понедельник, 24 Декабря 2018, 15:39 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Реализую простой журнал событий "что произошло", фразы НПС и т.д., по типу Fallout. Проблема в том, что строки журнала могут иметь разную высоту, отсюда и происходит наложение новой строки на предыдущую. Конечно, можно урезать текстовые сообщения, чтобы они умещались в окошко журнала, но это не всегда будет возможно.
Как я делал:
В объекте журнала есть массив строк txtions[i]. При определенном событии в других объектах формируется текстовая строка. В объекте журнала все строки копируются в строки с большим индексом (txtions[i+1]=txtions[i]), после чего в txtions[0] записывается та самая текстовая строка. Ну а в Draw объекта журнала через for рисуются все строки:
Код
for (i=0;i<20;i+=1)
  {
    if y-(y-i*16)<=80//строки отрисовываются снизу вверх, только до определенной координаты, дальше не рисуются.
      {
        draw_text_ext_color(view_xview+32,(view_yview+view_hview-32)-i*13-(string_height_ext(txtions[0],-1,512)),txtions[i],-1,512,c_yellow,c_yellow,c_yellow,c_yellow,1);
      }
  }

Если новая строка txtions[0] имеет двойную высоту, то все строки чата смещаются аккуратно. Но если снова txtions[0] становится нормальной высоты, на 1 строчку, то не смещается никто, а строка txtions[0] наползает на строку txtions[1].
Очень не хочется делать строки в виде объектов и плясать от координат предыдущего объекта строки, все-таки лишних 50 объектов на экране как то нехорошо. Есть ли здесь какой-то другой способ?


Лучше - быть, чем - казаться.
P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
BrightSpotДата: Понедельник, 24 Декабря 2018, 19:02 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
просто разбивай строку на n строк и заноси по 1...


Более мощный компьютер глючит быстрее и точнее.
GrannerДата: Понедельник, 24 Декабря 2018, 19:23 | Сообщение # 3
почетный гость
Сейчас нет на сайте
BrightSpot, можешь подсказать - каким образом разбивать строку, если неизвестны количество слов и количество букв в получаемой строке?

Лучше - быть, чем - казаться.
P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
BrightSpotДата: Понедельник, 24 Декабря 2018, 19:28 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
я не вспомню точно названия ф-ций, но в справке в разделе "строки" должны быть ф-ции копировать\удалить(и т.п) часть строки по количеству знаков\индексу...
и вообще в том разделе должно быть достаточно инфы для подобного.
возможно есть ф-ция для подсчета слов, но и метод перебора по символам ни кто не отменял=)



Более мощный компьютер глючит быстрее и точнее.
GrannerДата: Понедельник, 24 Декабря 2018, 19:35 | Сообщение # 5
почетный гость
Сейчас нет на сайте
Насколько я видел, функции подсчета слов в строках нет, только символы и подстроки.
Можно конечно проводить проверку по длине строки, потом искать символ пробела где-то там возле конца первой строки... Но мне кажется это будет чересчур громоздко :(


Лучше - быть, чем - казаться.
P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
BrightSpotДата: Понедельник, 24 Декабря 2018, 19:48 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Цитата Granner ()
Но мне кажется это будет чересчур громоздко

тебя ждет открытие, когда дойдешь до нормального языка =)



Более мощный компьютер глючит быстрее и точнее.
GrannerДата: Вторник, 25 Декабря 2018, 11:47 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Как ни странно, но С++, который я изучал, как-то меня не вдохновил на прототипирование :)
Решил задачу, выкладываю, если кому понадобится:
Код
      smech=string_height_ext(txtions[0],-1,512);// ввел переменную смещения координат, которая вначале берет высоту первой строки,
      for (i=0;i<19;i+=1)// потом прогоняем массив - на 1 индекс меньше, чтоб не было выхода за границы! - исходный массив составляет 20 строк,
        {
        draw_text_ext_color(view_xview+32,(view_yview+view_hview-32)-smech,txtions[i],-1,512,c_yellow,c_yellow,c_yellow,c_yellow,1);// отрисовываем строку со смещением
        smech+=string_height_ext(txtions[i+1],-1,512);// и добавляем высоту строки из следующего индекса.
        }


Лучше - быть, чем - казаться.
P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг