|
|
|
|
[Вопрос] Floating Text (texttag)
|
|
FatalBlade | Дата: Пятница, 30 Сентября 2011, 19:40:39 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| У меня есть скилл Suffer, который при активации накапливает урон. При накопление максимального урона, урон перестаёт накапливаться пока: 1) - Герой не заюзает спелл Unleash, который наносит столько урона сколько накопил герой 2) - Время действия спелла Suffer не закончится (60 секунд) 3) - Герой не умрёт
Когда герой накапливает максимальное количество урона, нужно что бы над героем появился текст "UNLEASH!!!", и плавал над ним, пока не произойдут 3 выше-написанных события.
Я могу сделать триггер, с событием например 0.05 секунд, который будет работать постоянно, и циклом проверять накопленный урон всех героев тип которых Мясник. Если накопленный урон больше максимального, то создавать texttag над юнитом, и тут же его удалять. Таким образом текст будет плавать. Но я не хочу так делать. Я стараюсь избегать триггеров с событием малого периода, темболее таких которые работают ПОСТОЯННО, и помимо всего этого в этом триггере есть цикл который каждый 0.05 секунд что то проверяет (if/then)
Есть ещё вариант - глобалки. И не массив, а именно 10 переменных типа real. Есть триггерное событие которое фиксирует реальное число, которое НЕ СОСТОИТ в массиве. Но это 10 триггеров и 10 глобалок...
Есть другие варианты это реализовать?
Сообщение отредактировал FatalBlade - Пятница, 30 Сентября 2011, 19:41:39 |
|
|
|
oleg_best_oleg | Дата: Пятница, 30 Сентября 2011, 21:15:11 | Сообщение # 2 |
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
| Quote (FatalBlade) Я стараюсь избегать триггеров с событием малого периода так делай не 0.05 сек., а 0.20, 0.25, 0.33, 0.45, 0.50, лагов меньше будет)
|
|
|
|
FatalBlade | Дата: Пятница, 30 Сентября 2011, 21:30:03 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (oleg_best_oleg) так делай не 0.05 сек., а 0.20, 0.25, 0.33, 0.45, 0.50, лагов меньше будет) Но так некрасиво будет, текст будет прыгать, а не плавно двигаться с юнитом. Я не категорически против таких событий. У меня они часто используются, но это в основном только для отталкивания юнитов спеллом и всё такое, то есть это не триггеры с 0.05 которые работают всю игру. Они включаются на 1-2 секунды и выключаются. Так же и я хочу что бы было, что при накопление урона до максимума, активируется триггер или функция с событие 0.05, и оно работает пока не произойдёт одно из трёх выше указанных мной действий в первом посте.
Есть идеи как это сделать?
|
|
|
|
Mep3aB4uK | Дата: Суббота, 01 Октября 2011, 03:59:45 | Сообщение # 4 |
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
| 1)Cкил саффер С:изучает скил У:изучен - саффер и уровень саффера = 0 Д:добавить соб. в триг2 изучающий юнит получает урона сохранить хэш(реал) ид(изучающий юнит) 0. ТРИГ2 С:пусто У:уровень баффа саффер > 0 if загрузить хэш(реал) ид(триггер юнита) < max(накопленого урона) then SaveReal(udg_H,id(GetTriggerUnit()),1,LoadReal(udg_H,id,1)) else call FunctionTextTag() call SaveTextTagHandle(udg_H,id(timer),1,txt) call SaveUnitHandle(udg_H,id(timer),2,GetTriggerUnit()) call CreateTimer(timer,.04,true,function ***) endif function **** if LevelBuff>0 and LoadReal(udg_H,id(LoadUnit()) then call ChangePositionTextTag(LoadTextTag(),GetWidgetX(LoadUnit()),GetWidgetY(LoadUnit())) else call destroytexttag call FlushChildHashtable(udg_H,id(timer)) endif endfucntion P.S писал не на трезвую голову..... если поймешь бред выше то остальные вопросы завтра, (если 1 не был вопросом то описал как удобней сделать(мне) и по минимуму глобалок)
Сообщение отредактировал Mep3aB4uK - Суббота, 01 Октября 2011, 04:00:38 |
|
|
|
FatalBlade | Дата: Суббота, 01 Октября 2011, 10:09:51 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Я нечё не понял Напиши плз потом на трезвую голову. То что ты сделал приведёт к огромным лагам. Каждый раз когда герой получает урон, если накопилось больше максимума, запускается периодический таймер... ))
|
|
|
|
lawson | Дата: Суббота, 01 Октября 2011, 11:25:53 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Юнит использует способность УСлови: способность == накопление урона Действия: создать новый триггер: TriggerUnit получает урон
Новый триггер: Действия загруженая переменная урона = загруженаая переменная урона + GetEventDamage() сохраняем в хеш перменную урона Если загруженная переменная урона >= 100 то Запускаешь таймер удаляешь триггер(GetTriggeringTrigger()) конец условия
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Суббота, 01 Октября 2011, 11:26:42 |
|
|
|
FatalBlade | Дата: Суббота, 01 Октября 2011, 11:29:32 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| lawson, У меня уже есть эта способность... Мне лишь нужен textag который будет светиться когда герой накопил маскимум урона.
|
|
|
|
lawson | Дата: Суббота, 01 Октября 2011, 14:18:55 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Mep3aB4uK) call CreateTimer(timer,.04,true,function ***) endif function **** if LevelBuff>0 and LoadReal(udg_H,id(LoadUnit()) then call ChangePositionTextTag(LoadTextTag(),GetWidgetX(LoadUnit()),GetWidgetY(LoadUnit())) else call destroytexttag call FlushChildHashtable(udg_H,id(timer)) endif endfucntion Только период сделай побольше.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Суббота, 01 Октября 2011, 14:19:44 |
|
|
|
Mep3aB4uK | Дата: Суббота, 01 Октября 2011, 14:20:49 | Сообщение # 9 |
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
| когда больше максимума урона и буль фалсе создаешь текстаг буль = тру старт таймер *************Таймер************ проверка на буль = тру если уровень бафа > 0 В таймере просто меняешь позицию текст тага иначе баф = фалсе ********************************* при приминении абилы буль = фалсе
|
|
|
|
|
|
|
|
|
|
|