Думаю есть ли наработка который не плодят тестаг за каждый убитый врагов..
Например способность сразу убил всех 5 врагов, но увидел лишь 1 текстаг который показывает опыт за 1 врага а остальное не видно так как они все одновременно создалось в точки позиции...
Суть наработка это ловить события умирает и заносит в массив число опыта если нет старых массива, если есть то просто увеличиваем
пример 5 опыт за 1 врага то у 5 врагов будет 25 опыта.. Но чтобы работал создаю таймер на 0.03 сек если убийца убил врага увеличиваем если таймер истек то выводим общие опыта, а после чего обнуляем массив убийцу.
Итог создаем 1 текстаг за 100 врага одновременно, чем создавать 100 текстаг за 100 монстров...
PS Извини за русский язык... но это создаст оптимальный игру без лагов и фризов

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

Сделал за 5 минут не тестировал
library RPGText
    globals
        private unit array s
        private real array d
    endglobals
    
    function displayTextExp takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local unit u = s[GetHandleId(t)]
        local real r = d[GetHandleId(u)]
        
        // дальше уже можно шаманить с текстом
        
        
        // Очишаем утечки
        call DestroyTimer(t)
        set u = null
        
        // А также очистка массива 
        //
        //
        //
    endfunction
    
    function createText takes unit u, real r, code c returns nothing
        local integer i =  GetHandleId(u)
        local timer t 
        
        if d[i] == 0 then
            set t = CreateTimer()
            
            // Записиваем значение
            set s[GetHandleId(t)] = u
            set d[i] = r 
            
            call TimerStart(t, 0.03, false, c)
            set t = null
        else
            set d[i] = d[i] + r // Увеличивает число
        endif
        
        set u = null
    endfunction
endlibrary
1
16
6 лет назад
1
Тексттаг очень лёгкая штука, плоди сотнями, ничего плохого. Но если ты прямо перфекционист, то можешь и так
0
29
6 лет назад
Отредактирован 16GB
0
DracoL1ch,
Ну так там лимит в 100 штук (вроде как) потом баговать начинает. Они как будто начинают переиспользоваться.
0
16
6 лет назад
0
100 штук на локальной системе
тт асинхронны и их не нужно создавать для кого-либо, кроме того, кто должен его увидеть
у меня куча тт и не было проблем, это нужно постараться, чтобы за лимит выйти
чистятся они сами, если все 100 оказались заняты - новый не создастся вообще, вернет null вместо объекта
0
23
6 лет назад
Отредактирован pro100master
0
Сделал за 5 минут не тестировал
library RPGText
    globals
        private unit array s
        private real array d
    endglobals
    
    function displayTextExp takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local unit u = s[GetHandleId(t)]
        local real r = d[GetHandleId(u)]
        
        // дальше уже можно шаманить с текстом
        
        
        // Очишаем утечки
        call DestroyTimer(t)
        set u = null
        
        // А также очистка массива 
        //
        //
        //
    endfunction
    
    function createText takes unit u, real r, code c returns nothing
        local integer i =  GetHandleId(u)
        local timer t 
        
        if d[i] == 0 then
            set t = CreateTimer()
            
            // Записиваем значение
            set s[GetHandleId(t)] = u
            set d[i] = r 
            
            call TimerStart(t, 0.03, false, c)
            set t = null
        else
            set d[i] = d[i] + r // Увеличивает число
        endif
        
        set u = null
    endfunction
endlibrary
Принятый ответ
0
16
6 лет назад
0
*сами по таймауту, заданному в настройках
Чтобы оставить комментарий, пожалуйста, войдите на сайт.