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

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

Закрытая тема
 
IceInfernal
...где распостерся мрак
offline
Опыт: 2,317
Активность:
Ошибка в коде
Код:
function Spell takes unit u returns nothing
    if GetUnitAbilityLevelSwapped( 'A008', u ) == 1 then
        call PauseUnit( true, u )
        call TransparentUnit( u, 0 )
    endif
endfunction
Вот такой недоделанный(пока) код заклинания - указанный юнит скрывается на 10/15/20 сек. и потом снова появляется. Вроде бы, все нормально, а при сохранении карты редактор вылетает(
2ю функцию я объявил выше
Виноваты именно эти две функции - если их комментом сделать, все нормально
Как правильно сделать?
Старый 10.07.2009, 19:45
J
expert
offline
Опыт: 48,447
Активность:
покажи функцию TransparentUnit
Старый 10.07.2009, 20:06
IceInfernal
...где распостерся мрак
offline
Опыт: 2,317
Активность:
Код:
function TransparentUnit takes unit u, integer n returns nothing
    call SetUnitVertexColor( u, 100, 100, 100, n )
    if n != 100 then
        set n = n + 1
        call PolledWait( 1.00 )
        call TransparentUnit( u, n )
    endif
endfunction
Вот такая функция - плавное исчезание юнита) Для красоты спелла
Кстати с ней ошибок небыло

IceInfernal добавил:
Ой) вот так будет правильнее:
Код:
function TransparentUnit takes unit u, integer n returns nothing
    call SetUnitVertexColor( u, 100, 100, 100, n )
    if n != 100 then
        set n = n + 1
        call PolledWait( 0.01 )
        call TransparentUnit( u, n )
    endif
endfunction

Отредактировано IceInfernal, 10.07.2009 в 20:41.
Старый 10.07.2009, 20:30
Rewenger
The culprit will not die
offline
Опыт: 35,873
Активность:
Можно было и Syntax Check сделать=)
Попробуй PauseUnit( true, u ) заменить на PauseUnit( u, true )
А вообще это TransparentUnit будет работать? Мне казалось, там луп нужен.

Отредактировано Rewenger, 10.07.2009 в 21:32.
Старый 10.07.2009, 21:12
GadenbIsh
Просто Гад
offline
Опыт: 70,430
Активность:
Здесь сделано не циклом, а рекурсией. Попробуй сделать как раз таки циклом, может там переполнение стека какое-нибудь
Старый 10.07.2009, 21:45
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Код:
globals
    integer index=0
endglobals

function TransparentUnit takes nothing returns nothing
    if index!=100 then
        call SetUnitVertexColor(u,100,100,100,index)
        set index=index+1
    else
        call DestroyTimer(GetExpiredTimer())
        set index=0
    endif
endfunction

//...
    call TimerStart(CreateTimer(),0.01,true,function TransparentUnit)
//...

Отредактировано Hellfim, 11.07.2009 в 01:01.
Старый 10.07.2009, 23:13
J
expert
offline
Опыт: 48,447
Активность:
Hellfim твой код сделай красивый вертолет при выполнении нижней функции )
Старый 10.07.2009, 23:26
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Цитата:
call SetUnitVertexColor( u, 100, 100, 100, n )

это не столь важно, и к проблеме не относится, но точно 100? быть может 255?
Старый 10.07.2009, 23:26
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
J, а так?
Старый 10.07.2009, 23:50
J
expert
offline
Опыт: 48,447
Активность:
функции что вешаются на таймер или триггер не должны принимать никаких значений, возвращать - да, но принимать - нет, иначе вар крашится при выполнении атача функции на триггер/таймер
Старый 10.07.2009, 23:55
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Кстати лучше делать ExecuteFunc в таком случае
Старый 11.07.2009, 00:04
J
expert
offline
Опыт: 48,447
Активность:
функции вызываемые через ExecuteFunc тоже не должны принимать параметры
Старый 11.07.2009, 00:18
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
J, о_год, я просто скопировал его функцию -.- Ну вообще да, очень тупой фейл.

Hellfim добавил:
А про то, что они не должны принимать аргументы и возвращать я знал...
Старый 11.07.2009, 01:01
Daemonik

offline
Опыт: 5,084
Активность:
Код:
function TransparentUnit takes unit u, integer n returns nothing
    call SetUnitVertexColor( u, 100, 100, 100, n )
    if n != 100 then
        set n = n + 1
        call PolledWait( 0.01 )
        call TransparentUnit( u, n )
    endif
endfunction

А это нормально что функция саму себя вызывает???
Или это так задумано?
Старый 11.07.2009, 05:26
J
expert
offline
Опыт: 48,447
Активность:
рекурсию вообще лучше не использовать если не имеете дело с иерархией структур

J добавил:
Rewenger не пугайся, ты правельно посоветовал луп, я просто не дочитал)
Старый 11.07.2009, 08:41
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
нет, луп не правильно. не получится достигнуть плавности в лупе из-за ограничения минимальной задержки. ту ттолько таймер\триггер
Старый 11.07.2009, 10:58
IceInfernal
...где распостерся мрак
offline
Опыт: 2,317
Активность:
Код:
native          PauseUnit           takes unit whichUnit, boolean flag returns nothing
Посмотрел common.j... и оказалось, что я перепутал местами аргументы) А следовательно, Rewenger был прав.
Извините за беспокойство, недодумался сам) Спасибо всем, закройте тему.

IceInfernal добавил:
Подождите-ка... Продолжжил код:
Код:
function Spell takes unit u returns nothing
    call PauseUnit( u, true )
    call TransparentUnit( u, 0 )
    call PolledWait( 1.00 )
    call ShowUnitHide(u)
    if GetUnitAbilityLevelSwapped( 'A008', u ) == 1 then
        call PolledWait( 8.00 )
    endif
    if GetUnitAbilityLevelSwapped( 'A008', u ) == 2 then
        call PolledWait( 13.00 )
    endif
    if GetUnitAbilityLevelSwapped( 'A008', u ) == 3 then
        call PolledWait( 18.00 )
    endif
    call ShowUnitShow(u)
    call UntransparentUnit(u)
    call PolledWait( 1.00 )
    call PauseUnit( u, false )
endfunction
И ВЕ придирается к последним двум ф-циям

IceInfernal добавил:
Код:
function UntransparentUnit takes unit u, integer n returns nothing
    call SetUnitVertexColor( u, 100, 100, 100, n )
    if n != 0 then
        set n = n - 1
        call PolledWait( 0.01 )
        call TransparentUnit( u, n )
    endif
endfunction

Отредактировано IceInfernal, 11.07.2009 в 14:07.
Старый 11.07.2009, 13:40
Закрытая тема

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

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

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

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



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