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

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

Закрытая тема
 
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Выход из цикла при попадании в рект
Добрый день всем.
Сабж: юниту дается приказ мув в рект, нужно запаузить его после того как он попадет в него
Код для решения:
IssuePointOrder(u,"move",GetRectCenterX(rc),GetRectCenterY(rc))
loop
exitwhen (GetRectMinX(rc) <= GetUnitX(u)) and (GetUnitX(u) <= GetRectMaxX(rc)) and (GetRectMinY(rc) <= GetUnitY(u)) and (GetUnitY(u) <= GetRectMaxY(rc))
endloop
BJDebugMsg("2")
юнит в рект приходит, но двойка не выводится
Чего не хватает в цикле?
П.с делать динамик триггер с событием юнит входит в регион на усе держу, но думаю что цикл будет лучше без создания лишних переменных
Старый 27.07.2010, 11:28
Nekit1234007

offline
Опыт: 11,916
Активность:
Функция вылетела из-за почти бесконечного цикла.
Старый 27.07.2010, 12:20
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
» cut
private struct MoveToCenter
static timer t = CreateTimer()
static int c = 0
static MoveToCenter array m
unit u
rect r

static void Timer() {
    int i=0
    real x1 = 0.00
    real y1 = 0.00
    MoveToCenter M = 0
    Main Mn = 0
    loop ; exitwhen i>=.c
    M = .m[i]
    x1 = GetUnitX(M.u)
    y1 = GetUnitY(M.u)
    if (GetRectMinX(M.r) <= x1) and (x1 <= GetRectMaxX(M.r)) and (GetRectMinY(M.r) <= y1) and (y1 <= GetRectMaxY(M.r)) then
        SetUnitX(M.u, GetRectCenterX(M.r))
        SetUnitY(M.u, GetRectCenterY(M.r))
        //Vдальше не так важно
        Mn=Main.Return(.m[i].u)
        Mn.cmp=Mn.cmp-i
        Set_RowMP(Mn.cmp)
        if Mn.cmp > 0 then
            Main.Square_Create(x1,y1,Mn,M.r)
        else
            PauseUnit(Mn.u,true)
        endif
	//^не так важно
        .m[i].u=null
        .m[i].r=null
        .m[i].destroy()
        .c=.c-1
        .m[i]=.m[.c]
        i=i-1
        if .c<= 0 then
            PauseTimer(.t)
        endif
    endif
    i++
    endloop }

static void OnMove(unit u,rect r) {
    MoveToCenter M=MoveToCenter.create()
    M.u=u
    M.r=r
    if .c <= 0 then
        TimerStart(.t,0.50,true,function MoveToCenter.Timer)
    endif
    .m[.c]=M
    .c=.c+1 }
endstruct
решил проблему вроде, хотя сбои есть.
Ну тогда можно тему закрыть
Старый 27.07.2010, 12:37
Закрытая тема

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

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

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

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



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