Вопрос по спеллу
|
|
Kr0nus | Дата: Суббота, 23 Октября 2010, 16:33:04 | Сообщение # 1 |
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
| У меня тут возникла такая проблема:Герой кастует спелл,вокруг него появляются 4 шара(дамми).Надо чтоб они были в радиусе 250 от героя в каждые 90 градусов(тоесть 1 шарик на расстоянии 250 от героя по отношению 90,друго 180,270,360) Я для этого создал триггер,каждые 0.07 сек двигать их по этим точкам,но при этом мне еще надо чтобы эти дамми кастовали сжигание маны во всех кто рядом(в радиусе 500),из за того что я двигаю их каждую секунду,они не могут применить способность. Как мне это исправить?
|
|
|
|
DarkVader | Дата: Суббота, 23 Октября 2010, 17:17:37 | Сообщение # 2 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| помоему это можно решить только с помощью jass, не сбивает каст только SetUnitX и SetUnitY , любое другое движение сбивает Добавлено (23-10-2010, 17:10) --------------------------------------------- а что бы перейти от декартовой системы к полярной юзай 1 правило тригонометрии X = X0 + (R * Cos(a)) y = Y0 + (R * Sin(a)) где R - длинна смещения а - угол X0\Y0 - координаты центра( то есть точки относительно которой смещаешь) Добавлено (23-10-2010, 17:17) --------------------------------------------- и если будет глючить что то попробуй угол ставить в радианах
|
|
|
|
BinGO | Дата: Суббота, 23 Октября 2010, 17:22:29 | Сообщение # 3 |
Группа: Модераторы
Сообщений: 2906
Награды: 8
Блокировки:
| Настраивай скилл и дамми юнита (видимо, забыл убрать ему анимации). Если неправильно настроен дамми - он не будет моментально кастовать скиллы, а должен.
|
|
|
|
DarkVader | Дата: Суббота, 23 Октября 2010, 17:43:51 | Сообщение # 4 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Quote (B1nGO) Настраивай скилл и дамми юнита (видимо, забыл убрать ему анимации). Если неправильно настроен дамми - он не будет моментально кастовать скиллы, а должен. XDDD полюбому, вариант с анимациями проще=)))))
|
|
|
|
Kr0nus | Дата: Суббота, 23 Октября 2010, 20:55:49 | Сообщение # 5 |
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
| http://rghost.ru/3017588 B1nGO, Вот посмотри пожалуйста,я уже много что перепробовал,не получается Добавлено (23-10-2010, 20:55) --------------------------------------------- Никто не поможет?
|
|
|
|
DarkVader | Дата: Суббота, 23 Октября 2010, 21:49:38 | Сообщение # 6 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Я хз, потому как у самого проблемы с дамми бывают, решаю таким образом как написал тебе, а на счет анимация я не знаю, по идее их у него надо убрать что бы не тратилось время на каст...
|
|
|
|
Kr0nus | Дата: Суббота, 23 Октября 2010, 22:00:10 | Сообщение # 7 |
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
| DarkVader, А можешь рассписать код : 4 дамми каждые сек двигать на точки:расстоянии 250 от героя на 90,180,270,360 градусов
|
|
|
|
DarkVader | Дата: Суббота, 23 Октября 2010, 23:34:48 | Сообщение # 8 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| ну я так пологаю они должны двигаться плавно? например если через глобалки... Code function Trig_moving_Actions takes nothing returns nothing local location point = GetUnitLoc(udg_caster) local real Xo = GetLocationX(point) local real Yo = GetLocationY(point) local location dummypoint local real X local real Y local integer i = 1 loop exitwhen ( i==5 ) set dummypoint = GetUnitLoc( udg_Dummy[i]) //=== çíà÷åíèå 10 â ñëåäóþùåé ñòðîêå óêàçûâàåò íà óãîë íà êîòîðûé þíèòû áóäó ïåðåîäè÷åñêè ñìåùàòüñÿ) set udg_a[i] = ((AngleBetweenPoints( point, dummypoint)) - 10) // 250 ýòî ðàññòîÿíèå îò öåíòðà( êàñòóþùåãî þíèòà) set X = ( Xo + (250 * Cos( udg_a[i]*0.0174 ))) set Y = ( Yo + (250 * Sin( udg_a[i]*0.0174 ))) call SetUnitX( udg_Dummy[i], X) call SetUnitY( udg_Dummy[i], Y) call RemoveLocation(dummypoint) set dummypoint = null set i = i + 1 endloop call RemoveLocation(point) set point = null endfunction
//=========================================================================== function InitTrig_moving takes nothing returns nothing set gg_trg_moving = CreateTrigger( ) call TriggerRegisterTimerEventPeriodic( gg_trg_moving, 0.05 ) call TriggerAddAction( gg_trg_moving, function Trig_moving_Actions ) endfunction вот как то так и вот тебе пример веселой карусели, обрати внимание что юниты могут бегать крутиться и кастовать спелы но их все равно будет двигать и каст не сбивается... Добавлено (23-10-2010, 23:30) --------------------------------------------- блин в коде коментарии каряво написаны=)))) ну в примере зато они нормально видны Добавлено (23-10-2010, 23:33) --------------------------------------------- конечно этот спел можно уместить в один триггер на jass но если с применением gui то прийдется в два создай триг который при касте будет создавать юнитов и записывать их в переменные, а потом активировать этот триггер и все юниты буду крутиться и смогут кастовать... но только что бы этот триггер был изначально выключен в нужно после set gg_trg_moving = CreateTrigger( ) добавить call DisableTrigger( gg_trg_moving ) и триггер будет выключен Добавлено (23-10-2010, 23:34) --------------------------------------------- =))) вообще если что то не понятно пиши помогу
|
|
|
|
Kr0nus | Дата: Воскресенье, 24 Октября 2010, 12:44:42 | Сообщение # 9 |
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
| Quote (DarkVader) set X = ( Xo + (250 * Cos( udg_a[i]*0.0174 ))) А если мне нужно задать строгий градус,например 90, заменить Code *Cos( udg_a[i]*0.0174) на да?Добавлено (24-10-2010, 12:44) --------------------------------------------- В общем я разобрался с координатами,большое спасибо DarkVader, у Осталась 1 проблема : http://i077.radikal.ru/1010/21/ae2b3ea5cda6.jpg на картинке видно,что 2 шарика в одно месте,а должны быть по другому ( а должны быть противоположны(как другие два) ) вот мой код связанный с движением: Code function Trig_DammyGoAndCast_Actions takes nothing returns nothing local location point = GetUnitLoc(udg_Drek_tar) local real Xo = GetLocationX(point) local real Yo = GetLocationY(point) local real X local real Y local integer i = 1 loop exitwhen (i==5) set X = ( Xo + ( 250 * Cos(90*i) ) ) set Y = ( Yo + ( 250 * Sin(90*i) ) ) call SetUnitX ( udg_Drek_tar_Dammy[i] , X ) call SetUnitY ( udg_Drek_tar_Dammy[i] , Y ) set i = i + 1 endloop call RemoveLocation(point) set point = null endfunction
//=========================================================================== function InitTrig_DammyGoAndCast takes nothing returns nothing set gg_trg_DammyGoAndCast = CreateTrigger( ) call DisableTrigger( gg_trg_DammyGoAndCast ) call TriggerRegisterTimerEventPeriodic( gg_trg_DammyGoAndCast, 0.07 ) call TriggerAddAction( gg_trg_DammyGoAndCast, function Trig_DammyGoAndCast_Actions ) endfunction
|
|
|
|
DarkVader | Дата: Воскресенье, 24 Октября 2010, 16:27:20 | Сообщение # 10 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Quote (Kr0nus) на картинке видно,что 2 шарика в одно месте,а должны быть по другому ( а должны быть противоположны(как другие два) ) вот мой код связанный с движением: ну в твоем примере как я понял кргуового движения шариков нет? тогда все просто ты от градусов не перешел в радианы... вот так они будут стоять строго по 90град друг от друга Code set X = ( Xo + ( 250 * Cos((90*i)*0.0174) ) ) set Y = ( Yo + ( 250 * Sin((90*i)*0.0174) ) ) потому как выяснилось угол здесь в тригонометрических функциях считается в радианах=)
|
|
|
|
Kr0nus | Дата: Воскресенье, 24 Октября 2010, 19:46:46 | Сообщение # 11 |
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
| DarkVader, Помогло,огромное спасибо =)
|
|
|
|