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

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

Ответ
 
Murador
Наркоман
offline
Опыт: 506
Активность:
Захват точек
В общем суть проблемы в том что я не могу придумать как более правильно реализовать захват точек, учитывая что ихнее кол-во может динамично меняться. Была у меня одна наработка но увы она со стороны оптимальности очень плохо работает.
Код:
function RD_POINT_ENTERED takes nothing returns nothing
    local integer A=0
    local integer B=0
    if caapp_on==true then
    loop
        exitwhen B>5
        if GetPlayerSlotState(Player(B))==PLAYER_SLOT_STATE_PLAYING then
            if wo_playerhero[B]==GetTriggerUnit() then
                call GroupEnumUnitsInRangeOfLoc(cap_unitgroup[B],GetUnitLoc(GetTriggerUnit()),70,null)
                set cap_cappingpoint[B]=GetEnumUnit()
            endif
        endif
        set B=B+1
    endloop
    endif
endfunction

function RD_CREATING_POINT takes integer x,integer y,real face returns nothing
    set rd_p_num=rd_p_num+1
    set rd_point[rd_p_num]=CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),'n000',map_x[x],map_y[y],face)
    call DisplayTextToPlayer(Player(0),0,0,GetUnitName(rd_point[rd_p_num])+" "+I2S(rd_p_num))
endfunction

function MAP_CREATE takes nothing returns nothing
    local integer i=1
    local trigger array t
    //Skiped Part!
    loop
        exitwhen i>rd_p_num
        set t[i]=CreateTrigger()
        call TriggerRegisterUnitInRange(t[i],rd_point[i],60.,null)
        call TriggerAddAction(t[i],function RD_POINT_ENTERED)
        set i=i+1
    endloop
    set caapp_on=true
endfunction

увы даже я могу сказать что это ^, какой то ужас но увы я не знаю как реализовать подобное лучше чем это.
Старый 17.05.2011, 23:04
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Отловить юнита, к которому приблизился другой... обоих можно найти с помощью GetTriggerUnit() и еще какого-то (не помню названия). Не стоит ради этого перебирать каждого ближайшего...
bee добавил:
+ лучше для этого дела юзать структуры. добавлять/удалять прямо во время игры.
Старый 17.05.2011, 23:27
Murador
Наркоман
offline
Опыт: 506
Активность:
Цитата:
Сообщение от bee
(не помню названия).

GetEnteringUnit()?

ну допустим мне нужно получить массив точки на которой юнит, тут вроде как без перебора не обойтись?
Старый 17.05.2011, 23:36
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
GetEnteringUnit()?
не это чел, который входит в область
Старый 18.05.2011, 00:40
Murador
Наркоман
offline
Опыт: 506
Активность:
можешь сделать пример?
Старый 18.05.2011, 18:44
Ответ

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

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

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

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



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