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

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

Закрытая тема
 
Kiran
Творю на Game Maker
offline
Опыт: 16,939
Активность:
[GUI] Движущийся луч, состоящий из дамми-юнитов
В общем надо сделать мне такой тригер, который бы поворачивал 10 даммми, созданных перед героем согласно углу его поворота, то бишь при его повороте луч из дамми тоже бы поворачивался. В отряд луч из дамми забил, а вот переменную-точку, в которую бы они двигались, настроить не могу :\
Старый 01.01.2010, 16:54
XOR

offline
Опыт: 38,159
Активность:
А я не понял самого вопроса. Какой луч из дамми? мб полярки
Старый 01.01.2010, 17:06
Kiran
Творю на Game Maker
offline
Опыт: 16,939
Активность:
XiMiKs, ну короче, есть 10 созданных дамми перед юнитом(обездвиженным, но не лишённым возможности поворачиваться), нужно что бы они реагировали на его повороты и тоже поворачивались, то бишь должен как раз выйти этакий луч, исходящий от героя.

Kiran добавил:
В общем надо переменную-точку с полярным смещением настроить правильно.
Старый 01.01.2010, 17:12
alexkill

offline
Опыт: 18,872
Активность:
нужно что бы они реагировали на его повороты и тоже поворачивались, то бишь должен как раз выйти этакий луч, исходящий от героя.
раз уж это луч, то они же еще и передвигаться постоянно должны?
то есть всегда быть перед лицом героя и смотреть туда, куда смотрит он..
Старый 01.01.2010, 17:24
Kiran
Творю на Game Maker
offline
Опыт: 16,939
Активность:
XiMiKs, да не, мне надо точку менять.
Старый 01.01.2010, 17:26
XOR

offline
Опыт: 38,159
Активность:
не юзай точки, координаты/векторы в барахолке была такая система авторства NCrashed
Старый 01.01.2010, 17:27
Kiran
Творю на Game Maker
offline
Опыт: 16,939
Активность:
alexkill, не совсем. Я подобрал модель светящегося шара и поставил всех дамми близко к друг другу из-за чего кажется, что вся их кучка, это луч. И надо мне теперь двигать эту кучку по отношению угла поворота героя, то бишь правильно настроить точку, в которую я их буду двигать.
Старый 01.01.2010, 17:28
Doc

offline
Опыт: 63,163
Активность:
local unit un = //твой юнит
local unit array u = //твои дамми
local integer i = 0
loop
exitwhen i > 10
call SetUnitX(u[i], GetUnitX(un) + (i * 100) * Cos(GetUnitFacing(un) * (3.14159/180))
call SetUnitY(u[i], GetUnitY(un) + (i * 100) * Sin(GetUnitFacing(un) * (3.14159/180))
set u[i] = null
set i = i + 1
endloop
set un = null
Поправил код, было слегка неправильно

Отредактировано DoctorGester, 01.01.2010 в 17:51.
Старый 01.01.2010, 17:38
silumin

offline
Опыт: 11,153
Активность:
Kiran, присоединюсь к DoctorGester'у, дополнив его код до функционирующего примера:
» Рабочий пример

Код:
function MoveRay takes nothing returns nothing
local integer i = 0
loop
call SetUnitX(udg_Dummy[i], GetUnitX(udg_Hero) + (i * 50+200) * Cos(GetUnitFacing(udg_Hero) * (3.14159/180)))
call SetUnitY(udg_Dummy[i], GetUnitY(udg_Hero) + (i * 50+200) * Sin(GetUnitFacing(udg_Hero) * (3.14159/180)))
exitwhen i==9
set i = i + 1
endloop
endfunction

function Trig_CrtAllUnits_Actions takes nothing returns nothing
local integer i = 0
loop 
set udg_Dummy[i] = CreateUnit(Player(0),'ewsp',0.0,0.0,0.0)
exitwhen i==9
set i = i + 1
endloop
set udg_Hero = CreateUnit(Player(0),'Hpal',0.0,0.0,0.0)
call TimerStart(udg_MTimer,0.05,true,function MoveRay)
endfunction

//===========================================================================
function InitTrig_CrtAllUnits takes nothing returns nothing
    set gg_trg_CrtAllUnits = CreateTrigger()
    call TriggerRegisterTimerEventSingle(gg_trg_CrtAllUnits,0.01)
    call TriggerAddAction(gg_trg_CrtAllUnits,function Trig_CrtAllUnits_Actions)
endfunction

udg_Hero - персонаж на которго ориентируются даммики,
udg_Dummy[9] - светлячки даммики, 10 штук,
udg_MTimer - таймер, двигающий даммиков.
Старый 01.01.2010, 22:47
alexkill

offline
Опыт: 18,872
Активность:
50+200
3.14159/180
а выполнить действие нене?
я, например, в таких случаях, предпочитаю использовать группы, а не массивы, ибо постоянное использование лупов мне как-то не очень нравится
globals
   group gr = CreateGroup()
   timer tm = CreateTimer()
   integer int = 1
   unit caster = null
   unit temp = null
endglobals

function Move_Enum takes nothing returns nothing
    set temp = GetEnumUnit()
    call SetUnitX(temp, GetUnitX(caster)+50*int*Cos(GetUnitFacing(caster)*0.0175))
    call SetUnitY(temp, GetUnitY(caster)+50*int*Sin(GetUnitFacing(caster)*0.0175))
    call SetUnitFacing(temp, GetUnitFacing(caster))
    if int==9 then
      set int = 1
    else  
      set int = int + 1 
    endif  
endfunction

function Move takes nothing returns nothing
    call ForGroup(gr, function Move_Enum)
endfunction

function Invul takes nothing returns nothing
    call UnitAddAbility(GetEnumUnit(),'Aloc')
endfunction

function Actions takes nothing returns nothing
  local integer i = 0
   set caster = GetTriggerUnit()
     loop
     exitwhen i==9
       call GroupAddUnit(gr, CreateUnit(Player(0), 'hpea', GetUnitX(caster), GetUnitY(caster),0))
       set i = i + 1
     endloop  
   call ForGroup(gr, function Invul)
   call TimerStart(tm, 0.04, true, function Move) 
endfunction

function InitTrig_Item takes nothing returns nothing
    set gg_trg_Item = CreateTrigger(  )
    // событие подбирай сам, я не знаю, как нужно тебе 
    call TriggerRegisterPlayerUnitEvent( gg_trg_Item, Player(0), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
    call TriggerRegisterPlayerUnitEvent( gg_trg_Item, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
    call TriggerRegisterPlayerUnitEvent( gg_trg_Item, Player(2), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
    call TriggerRegisterPlayerUnitEvent( gg_trg_Item, Player(3), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)    
    call TriggerRegisterPlayerUnitEvent( gg_trg_Item, Player(4), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
    call TriggerRegisterPlayerUnitEvent( gg_trg_Item, Player(5), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)    
    // ....
    call TriggerAddAction( gg_trg_Item, function Actions )
endfunction

Отредактировано alexkill, 02.01.2010 в 00:22.
Старый 01.01.2010, 23:04
Kiran
Творю на Game Maker
offline
Опыт: 16,939
Активность:
Ребят, я вас конечно благодарю за эти примеры, но..... неужто реально нельзя просто так переменную-точку настроить(установить), чтоб потом группу дамми в неё двигать?

Kiran добавил:
Просто у меня уже был сделан такой тригер, но недавно он был удалён, а воссоздать его у меня не выходит :\
Старый 01.01.2010, 23:08
alexkill

offline
Опыт: 18,872
Активность:
Kiran, точки (аka локации, тип location) не нужны в большинстве случаев. изучай
пользуйся напрямую координатами.
Старый 01.01.2010, 23:09
Kiran
Творю на Game Maker
offline
Опыт: 16,939
Активность:
alexkill, да как-то у вас это по-заумному выглядит, а там просто было 4 точки, которые чистились и всё робило на ура. Там было, что 1 - положение героя, 2 переменная - это положения выбранных дамми(все действия были в цикле отряда), 2 - вторая переменная, смещённая на расстояние от первой точки, до второй по отношению к углу поворота гера, а 3 - ... вот не помню и всё, накрылся спел :\

Отредактировано alexkill, 01.01.2010 в 23:32.
Старый 01.01.2010, 23:17
Doc

offline
Опыт: 63,163
Активность:
Kiran, да, координаты не нужно обнулять и удалять, в отличие от локэйшенов, к тому же они работают быстрее
Старый 01.01.2010, 23:20
Kiran
Творю на Game Maker
offline
Опыт: 16,939
Активность:
DoctorGester, ну.. у меня и так работало нормально и удалять то точек не море, всего 4 = 4 строки, красота.
Старый 01.01.2010, 23:23
alexkill

offline
Опыт: 18,872
Активность:
Kiran, ты сейчас предлагаешь написать выражение типа (4*80)-(632/2) вместо 2+2...
изучи внимательно приведенные выше примеры, там все элементарно
если что не понятно - спрашивай

Отредактировано alexkill, 01.01.2010 в 23:35.
Старый 01.01.2010, 23:26
Kiran
Творю на Game Maker
offline
Опыт: 16,939
Активность:
alexkill, у меня русские тригеры, ничерта в ваших примерах не понимаю) Особенно, зачем там действия с иначе

Kiran добавил:
Да, кстати, я для примера сказал 10 дамми, на самом деле кол-во не важно, всё равно там движение группы.
Старый 01.01.2010, 23:34
alexkill

offline
Опыт: 18,872
Активность:
alexkill, у меня русские тригеры, ничерта в ваших примерах не понимаю)
а у меня - японские, язык здесь не важен, это же код. здесь одно представление (английское)
Особенно, зачем там действия с иначе
здесь следует перечень ссылок на статьи про жасс, оптимизацию кода и т.п. =)
вот тебе карта (пример в аттаче). изменяй параметры, смотри, что будет меняться - и сам раберешься.
Прикрепленные файлы
Тип файла: w3x rays.w3x (17.3 Кбайт, 21 просмотров )

Отредактировано alexkill, 02.01.2010 в 00:02.
Старый 01.01.2010, 23:41
silumin

offline
Опыт: 11,153
Активность:
Цитата:
Сообщение от alexkill
50+200
3.14159/180
а выполнить действие нене?

3.14159/180 - да, можно, согласен.
50+200 - не плохобы было копипастить все действия в скобках: i * 50+200
Старый 02.01.2010, 00:08
Kiran
Творю на Game Maker
offline
Опыт: 16,939
Активность:
Забыл сказать, я не джазер и мне нужен данный тригер на гуи. Вот кстати и он сам. Прошу посмотреть и сказать, как правильно настроить переменную p4.
Прикрепленные файлы
Тип файла: w3x не работающий дамми-луч.w3x (17.2 Кбайт, 17 просмотров )
Старый 02.01.2010, 01:20
Закрытая тема

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

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

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

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



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