Правильное смещение строк при отрисовке в журнале событий
|
|
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. Прежде чем задавать вопрос - всегда просматриваю форум и справку
|
|
| |