XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Awful
Несу добро, юзая зло
offline
Опыт: 824
Активность:
Почему прерывается цикл?
Собственно код:
Вызывающая функция: (В ней происходит перебор структур, каждая содержит массив точек..Полученная по индексу точка передается в вызываемую функцию)
Код:
local int idx=0,end=79,idxx=0,enddd=6,buf=0
    loop
    {
 //       if (idx==48)
   //     {
   //         call TriggerSleepAction( 0.01 ) Работает только если вставить вот это.. Зачем??
   //     }
        exitwhen (idx>end || idx>lastnum)
        if (buf==7)
        {
            buf=0
        }
        idxx=0
        loop
        {
            exitwhen idxx>enddd
            CgTerType(loc[idx].points[idxx],buf)  
            idxx++
        }
        
        buf++
        idx++
    }

Вызываемая функция: (изменяет тип земли в полученной точке, в зависимости от значения tt)
Код:
void CgTerType(location obl ,int tt)
{
    local int i=0
    loop
    {
        exitwhen i > 9
        if (tt==0)
        {
            call SetTerrainTypeBJ( obl, 'Cpos')
        }
        else
        {
            if (tt==1)
            {
                call SetTerrainTypeBJ( obl, 'Osmb' )
            }
            else
            {
                if (tt==2)
                {
                    call SetTerrainTypeBJ( obl, 'Yhdg' )
                }
                else
                {
                    if (tt==3)
                    {
                        call SetTerrainTypeBJ( obl, 'Agrs' )
                    }
                    else
                    {
                        if (tt==4)
                        {
                            call SetTerrainTypeBJ( obl, 'Ywmb' )
                        }
                        else
                        {
                            if (tt==5)
                            {
                                call SetTerrainTypeBJ( obl, 'Idki' )
                            }
                            else
                            {
                                if (tt==6)
                                {
                                    call SetTerrainTypeBJ( obl, 'Nice' )
                                }
                                else
                                {
                                    if (tt==7)
                                    {
                                        call SetTerrainTypeBJ( obl, 'Kdkt' )
                                    }
                                    else
                                    {
                                        if (tt==8)
                                        {
                                            call SetTerrainTypeBJ( obl, 'Idtr' )
                                        }
                                    }
                                  }
                            }
                        }
                    }
                }
            }
        }
        i++
    }
}


Цикл первой функции прерывается, как только индекс дойдет до 48. Избежать здесь можно добавив задержку - не критично, но такое же наблюдается и в другой функции, задержки в которой создадут минутную задержку в общем... Подскажите как решить? Ну ладно было бы что-то затратное по ресурсам, но действия ведь элементарны, не понимаю в чем причина... С таким прерыванием столкнулся только в jass....

Цикл в вызываемой функции вставил, чтобы продемонстрировать пример прерывания..
Старый 08.03.2011, 17:22
Msey
????
offline
Опыт: 67,346
Активность:
} разве вызывает endloop?
Старый 08.03.2011, 17:27
Hanabishi
COOL STATUS
offline
Опыт: отключен
Awful, вроде всё правильно
юзай elseif
Hanabishi добавил:
хотя стоит ещё внимательно проверить расстановку скобок
Старый 08.03.2011, 17:30
Doc

offline
Опыт: 63,163
Активность:
Ты вообще вкурсе, что есть аткой оператор, как elseif?
Doc добавил:
А вообще в варе слишком ресурсоемкие циклы обрывают поток.
Старый 08.03.2011, 17:51
DioD

offline
Опыт: 45,134
Активность:
на цджаз писать догадались а на отладочные сообщения ума не хватило? исправляем.
Старый 08.03.2011, 17:51
Toadcop

offline
Опыт: 54,313
Активность:
ну думаю что тут классика и поток просто убивается... вынеси первый вложеный цыкл (т.е. всё что вложено в первом цыкле) в отдельную функцию и вызывай иё через ExecuteFunc("my_func_name") допустим.
Старый 08.03.2011, 18:21
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 04:15.