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

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

Ответ
 
Danial

offline
Опыт: 1,342
Активность:
Ограничение на количество выполнений цикла
Скажите, какое максимальное число раз может быть выполнен цикл? Вот, допустим, я создаю триггер «Cycle» с таким действием:
function Trig_Cycle_Actions takes nothing returns nothing
    local integer i = 0
    loop
        exitwhen i > 10000
        call DisplayTextToForce( GetPlayersAll(), I2S(i) )
        set i = i+1
    endloop
    call KillUnit( gg_unit_hpea_0001 )
endfunction
И в результате вижу, что цикл выполнился не 10 000 раз, как я того хотел, а только 6520 раз. А последняя функция вообще проигнорировалась. Если же положить «exitwhen i > 6520» или меньшее число, что тригер будет выполнен правильно (см. скрин 2).
Значил ли всё это, что циклы в Jass’е не могут выполняться больше 6520 раз? И что делать, если нужен цикл, который бы выполнялся 10 000 или большее число раз?
Миниатюры
Кликните на картинку для увеличения
Название:  скрин 1.jpg
Просмотров: 16
Размер:  221.1 Кбайт  Кликните на картинку для увеличения
Название:  скрин 2.jpg
Просмотров: 14
Размер:  222.7 Кбайт  

Отредактировано ShadoW DaemoN, 30.01.2012 в 07:27.
Старый 30.01.2012, 07:01
vladfaust

offline
Опыт: 12,714
Активность:
нужен цикл, который бы выполнялся 10 000 или большее число раз?
Не знаю насчет лимитов. Попробуй в одном триггере несколько циклов. В первом лимит 6520, во втором (10000-6520).
Старый 30.01.2012, 07:09
Danial

offline
Опыт: 1,342
Активность:
Если вложить несколько циклов в один, то результат останется таким же. Действие call KillUnit( gg_unit_hpea_0000 ) опять не выполнено и call DisplayTextToForce( GetPlayersAll(), I2S(i) ) 10 000 раз не запущенно (см скрин в приложении).
function Trig_Cycle_Actions takes nothing returns nothing
 local integer i = 0 
 local integer k = 0

loop
exitwhen k == 2
set i=0
 loop
 exitwhen i > 5000
 call DisplayTextToForce( GetPlayersAll(), I2S(i) )
//Действие, которое должно быть выполнено 10 000 раз
 set i = i+1
 endloop
set k = k+1
endloop

call KillUnit( gg_unit_hpea_0000 )
endfunction
Миниатюры
Кликните на картинку для увеличения
Название:  Безымянный.jpg
Просмотров: 6
Размер:  220.4 Кбайт  

Отредактировано Danial, 01.02.2012 в 13:05.
Старый 30.01.2012, 07:34
Msey
????
offline
Опыт: 67,346
Активность:
Danial:
А почему тег [code] [/code] не работает?:)
потому что у тебя включено новое форматирование

что мешает разбить цикл на несколько?
Старый 30.01.2012, 08:00
youtube
сктыщь
offline
Опыт: 8,025
Активность:
как вариант переместить это действие, за цикл
function Trig_Cycle_Actions takes nothing returns nothing
    local integer i = 0
    loop
        exitwhen i > 10000
        set i = i+1
    endloop
    call DisplayTextToForce( GetPlayersAll(), I2S(i) )
    call KillUnit( gg_unit_hpea_0001 )
endfunction
и число будет больше
Старый 30.01.2012, 08:07
ScorpioT1000
Работаем
offline
Опыт: отключен
См посты тоадкопа например =) т.е. правильное решение - бить поток на части с пом ExecuteFunc
Старый 30.01.2012, 08:17
Danial

offline
Опыт: 1,342
Активность:
Msey, разбить цикл на несколько я не могу, потому что в моём примере он выполнятся даже не 6520, а около 50 раз (видимо, чем сложнее функция, которая должна выполнятся, тем быстрее вылетит цикл). Это будут километры кода, если разбить на множество циклов…
Youtube, дело в том, что я хочу даже не столько запустить цикл 10 000 раз, сколько выполнить какое-то действие 10 000 раз. В моём примере это действие call DisplayTextToForce( GetPlayersAll(), I2S(i) ), но это только для примера. На самом деле там десятки различных функций и вложенных циклов…
ScorpioT1000, чё-то не доходит до меня, как в пределах одной функции запустить 10 000 раз одно действие с помощью ExecuteFunc… Можно какой-нибудь пример хотя бы в самом общем виде?
Старый 30.01.2012, 09:41
ScorpioT1000
Работаем
offline
Опыт: отключен
Старый 30.01.2012, 09:52
Ответ

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

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

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

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



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