Пытался устранить утечку плавающего текста в счётчике урона, но пишет отсутствует оператор кода, делал всё по статье про изучение джасса.

Впервой вижу, чтоб так издевались над плавающем текстом...
Как пишет г-н Maniac_91, нет нужды в сохранении texttag, ибо при строчке
call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 0.50 )
или (вариант получше)
call SetTextTagLifespan(GetLastCreatedTextTag(), 0.50)
Ваш texttag, как умненький мальчик, сам уберется, когда он сделал своё дело ;)
Правда есть один нюанс... Если Вы добавили строчку
call SetTextTagPermanent(GetLastCreatedTextTag(),true)
то этот мальчик будет стоять подле Вас до конца сабантуя и ждать команды на уничтожение ;)
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
17
делая так ты только вредишь себе,если хочешь жасс изучить то делай на жассе а не на фракенштейне,и для такий частопереодических вещей лутше использовать глобальные массивы или структуры
17
ledoed, Я просто думал что могу пристроить сюда локальные переменные, там же в обучалке показывали как они работают на бесполезной вещи, а тут вроде мне они должны были помочь, а оказалось что они бесполезные( Тоесть нельзя создавать и запоминать несколько последних плавающих текстов и через время удалять их именно как объекты, а не так как их там удаляет?
17
вот тебе повезло нашел в старой карте код с плавующим текстом
сложная билеберда
//Плавающий текст
scope SetTextTag{

    
    public int count = 0
    private unit this_u[]
    private texttag this_texttag[]
    private int this_time[]

    private int this_tt[]
    
    private bool this_poss[]
    
    private float this_z[]
    
    
    
    
    
    
    
    
        private void RemoveUnitStruct(int i){

          count--
          

        //====================
        this_u[i]=this_u[count]
        this_z[i]=this_z[count]
        this_poss[i]=this_poss[count]
        this_time[i]= this_time[count]
        this_tt[i]=this_tt[count]
        this_texttag[i]=this_texttag[count]
        //======================
		this_u[count]=null
          
        }    
    
        private void Remove(int i){
        DestroyTextTag(this_texttag[i])

        RemoveUnitStruct(i)

        }   
    
    

//    MiniFunc_SetTextTag_AddUnit(unit u,string text,float x,float y,float z,bool poss,float speed,float angle,float size,float time,int R,int G,int B,int A)
    public void AddUnit(unit u,string text,float x,float y,float z,bool poss,float speed,float angle,float size,float time,int R,int G,int B,int A){
    
        this_texttag[count]= CreateTextTag()
        
        SetTextTagText(this_texttag[count], text, TextTagSize2Height(size))
        SetTextTagPos(this_texttag[count],x,y,z)
        SetTextTagColor(this_texttag[count], R, G, B, A)
        
        float vel = TextTagSpeed2Velocity(speed)
        float xvel = vel * Cos(angle * degrad)
        float yvel = vel * Sin(angle * degrad)
        SetTextTagVelocity(this_texttag[count], xvel, yvel)
        this_u[count]=u
        this_poss[count]=poss
        this_time[count]=R2I(time*sek)
        this_tt[count]=0
        this_z[count]=z
        
        count++
    }
    
    
    
    
    void Action(int i){
    
        if(this_poss[i]){
            SetTextTagPos(this_texttag[i],GetUnitX(this_u[i]),GetUnitY(this_u[i]),this_z[i])
        }
        
        if(++this_tt[i]>this_time[i]){
        
        Remove(i)
        
        }
    }
    
    public void Update(){int i = 0 ;while(i<count){Action(i);i++}}
    //таймер на 0.025
    
}
для понимания более упрощённая
//удаление юнита через время
scope UnitRemoveToTime{

        public int count =0
        //============================
        private unit this_u[] 
        private int this_timmer[] 
        private int this_tt[]

        private int Proverka(unit u){int i = 0;while(i<count){if(u==this_u[i]){return i}i++}return -1}


        private void RemoveUnitStruct(int i){

          count--
          

        //====================
        this_u[i]=this_u[count]
        this_timmer[i]= this_timmer[count]
        this_tt[i]=this_tt[count]
        //======================
		this_u[count]=null

          
        }

        private void Remove(int i){
       
       RemoveUnit(this_u[i])

        
        RemoveUnitStruct(i)

        }


        //MiniFunc_UnitRemoveToTime_AddUnit(unit u,float timmer)
        public void AddUnit(unit u,float timmer){

            int i =Proverka(u)
                    if(i!=-1){return}
                    
                        this_u[count]=u
                        this_timmer[count]=R2I(timmer*sek)//sek = 40
                        this_tt[count]=0
                        
                        count++
            

        }


            private void Action(int i){

                this_tt[i]++
                if(this_tt[i]>this_timmer[i] ){

                Remove(i)
                }

            }


            public void Update(){int i = 0 ;while(i<count){Action(i);i++}}
            //поток на 0.025



}
17
ledoed, Ну судя по всему можно тут чисто на гуи такое реализовать, так как вижу счётчик и таймер, ну так все могут, а я думал что локальные переменные даже с одинаковым именем могут по нескольку создаватся, типа сколько раз триггер сработал, столько переменных и создалось. и все они как отдельные обьекты потом уничтожат тексты к которым прикреплены. Хм может таймер попробовать приспособить?
ledoed, Так а ты можешь ответить просто, у меня утечка только текста или же текст удаляется, но там что-то другое handle увеличивает?
17
ну да конечно а в чём проблемма
а зачем в глобалку заносить плавующий текст
17
ledoed, Только не пойму, почему дестрой ласт флоатинг текст не устраняет утечку даже без ожидания, это странно, как будто дело не в этом.
17
ааа ты локалку необнуляешь
короче все локалки кроме типа float и int нужна обнулять типо
unit u = GetTriggerUnit()
u=null
17
ledoed, Это правильно, я уже сделал обнуление локалки, поэтому ставлю +, и спасибо за то что сказал какие не нужно обнулять. Но как я сказал проблема уже не в этом, Сначала нужно найти почему растёт handle, а потом уже исходя из причины убирать её, логично? Так вот я уменьшил скорость атаки юнита с 1 сек до 2.20 и всё стало удалятся нормально. Но почему ведь я ставил время жизни текста:
call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 0.50 )
call SetTextTagFadepointBJ( GetLastCreatedTextTag(), 0.30 )
Это если конвертировать гуи.Следовательно если время жизни текста меньше секунды а за этим идёт:
call DestroyTextTagBJ( GetLastCreatedTextTag() )
Утечки должны расти только при скорости атаки 0.80. В чём я ошибаюсь? Мне же нужно понимание чтоб не иметь проблем с этим в будущем.
17
Wait он не точный ты можешь поставиь 0.8 а выполниться через 1.2 вариант использовать таймеры для точности
32
Что за идиотия? Описано во всех статьях по jass локалки объявляются в начале функции, вейты - зло, и так далее.
17
ledoed, Да, да похоже только они, иду читать по ним статью.
quq_CCCP, Ну так я же нуб, в статье ненаглядный пример к тому-же.
quq_CCCP, Не знаешь как удалить все тексты в массиве?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.