Мне нужно каждые несколько секунд создавать плавающий текст, прикрепленный к зданию. По аналогии с цифрами, которые появляются над проклятым рудником. Этот текст должен с определенной скоростью двигаться вверх, постепенно растворяясь, чтобы за 3 секунды окончательно исчезнуть. У меня получилось сделать появление текста и движение вверх с нужной скоростью:
    local texttag t = (CreateTextTagUnitBJ( "+10", GroupPickRandomUnit(GetUnitsOfTypeIdAll('u01F')), 0, 10, 0.00, 100, 0.00, 0 ))
    call SetTextTagVelocityBJ( t, 60.00, 90 )
Ни одна из этих трех функций не дает вообще никакого эффекта:
    call SetTextTagLifespanBJ( t, 3 )
    call SetTextTagFadepointBJ( t, 3 )
    call SetTextTagAgeBJ( t, 3 )
Работает только мгновенное удаление:
call DestroyTextTagBJ( t )
Но это не то, что мне нужно. Подскажите, как все-таки сделать именно динамическое удаление текста?

Принятый ответ

Melissa, нужно отслеживать появление/удаление юнитов
каждый раз создавать группу намного удобнее
Тимур, а что по поводу
и вместо
GetFilterUnit() // используется при сортировки группы (Condition)
надо использовать
GetEnumUnit() // используется при переборе группы (ForGroup)
1
24
9 лет назад
Отредактирован Melissa
1
Загруженные файлы
0
23
9 лет назад
0
Melissa, ага, спасибо. Все работает.
0
28
9 лет назад
0
Тимур, текст надо сделать не перманентным
0
23
9 лет назад
Отредактирован Тимур
0
Да, и еще - вопрос, вытекающий из предыдущего. Мне нужно каждые 5 секунд создавать такой эффект на каждом здании, которое удовлетворяет определенному условию. Я пытаюсь сделать это через группу юнитов, но эффект в этом случае не появляется.
Код выглядит так:
function DeathLumberAct takes nothing returns nothing
	local unit u = GetFilterUnit()
	local texttag t = (CreateTextTagUnitBJ( "+10", u, 0, 10, 0.00, 100, 0.00, 0 ))
	call SetTextTagPermanentBJ( t, false )
	call SetTextTagLifespanBJ( t, 2 )
	call SetTextTagFadepointBJ( t, 1 )
	call SetTextTagVelocityBJ( t, 60.00, 90 )
endfunction

function DeathLumber takes nothing returns nothing
	call ForGroupBJ( GetUnitsInRectMatching(GetPlayableMapRect(), Condition(function HandicapUnitsDeath)), function DeathLumberAct )
endfunction

function InitDeathLumber takes nothing returns nothing
	local trigger a=CreateTrigger()
	call TriggerAddAction(a,function DeathLumber)
	call TriggerRegisterTimerEventPeriodic( a, 5.00 )
endfunction
Но ничего не происходит. Текст над нужными зданиями не появляется вообще. Что я делаю неправильно?
0
28
9 лет назад
Отредактирован nvc123
0
мб группа пустая
попробуй вместо
 ForGroupBJ( GetUnitsInRectMatching(GetPlayableMapRect(), Condition(function HandicapUnitsDeath)), function DeathLumberAct )
использовать
group g=CreateGroup();
GroupEnumUnitsOfType(g,"unitname",null) // unitname это имя твоего юнита
 ForGroup( g, function DeathLumberAct )
и вместо
GetFilterUnit() // используется при сортировки группы (Condition)
надо использовать
GetEnumUnit() // используется при переборе группы (ForGroup)
0
23
9 лет назад
0
nvc123, кроме типов юнита там нужно еще проверять их Custom Value и живы ли они (все эти условия как раз и проверяются с помощью функции HandicapUnitsDeath (она взята из другой системы, расположенной выше по коду, но тем не менее, здесь требуется такое же точно условие). Так что GroupEnumUnitsOfType здесь не подходит - иначе в группу войдут недостроенные здания, к примеру, или разрушенные, но еще не удаленные из игры.
0
24
9 лет назад
0
А как насчёт одной постоянной группы в периодике, в которую добавляются созданные и убираются уничтоженные здания?
0
28
9 лет назад
Отредактирован nvc123
0
Melissa, нужно отслеживать появление/удаление юнитов
каждый раз создавать группу намного удобнее
Тимур, а что по поводу
и вместо
GetFilterUnit() // используется при сортировки группы (Condition)
надо использовать
GetEnumUnit() // используется при переборе группы (ForGroup)
Принятый ответ
2
24
9 лет назад
2
Зато куда утечнее :dunno: Отлавливать не так уж и сложно... Хотя кому что
Чтобы оставить комментарий, пожалуйста, войдите на сайт.