Сейчас 09:07:03 Воскресенье, 28 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Функция, вызывающая сама себя (Желательно ли использовать следующую функцию?)
[Вопрос] Функция, вызывающая сама себя
FatalBladeДата: Четверг, 21 Июня 2012, 23:12:30 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Функция выбирает номер ячейки массива, и проигрывает саундтрек который в этой ячейке находится. Из другого массива он берёт реальное число - длинну саундтрека. Затем запускается глобальный таймер на время длинны саундтрека, а по истечению таймера функция опять запускает саму себя, и проделывает всё заново. Вот:

Code
function Trig_Music_Random_Actions takes nothing returns nothing
     local integer x = GetRandomInt( 1, 12 )
     call PlayThematicMusic( udg_Musics[x] )
     call TimerStart( udg_MusicTimer, udg_MusicLength[x], false, function Trig_Music_Random_Actions )
endfunction


Вопрос: не будет ли такая функция ущербной? Это вроде как называется рекурсией, не?


 

lawsonДата: Четверг, 21 Июня 2012, 23:21:31 | Сообщение # 2
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
В данном случае функция не вызывает саму себя, здесь таймер вызывает функцию по истечению времени.
Да по идеи все в норме.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

SirNikolasДата: Пятница, 22 Июня 2012, 08:14:33 | Сообщение # 3
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Все в норме.

Добавлено (22 Июнь 2012, 08:14:33)
---------------------------------------------
Можно еще от глобального таймера избавиться:

Code
function Trig_Music_Random_Actions takes nothing returns nothing  
    local integer x = GetRandomInt(1, 12)
    call PlayThematicMusic(udg_Musics[x])
    call TimerStart(GetExpiredTimer(), udg_MusicLength[x], false, function Trig_Music_Random_Actions)
endfunction

    //Первый запуск:
    call TimerStart(CreateTimer(), .0, false, function Trig_Music_Random_Actions)


 

FatalBladeДата: Пятница, 22 Июня 2012, 09:07:32 | Сообщение # 4
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
SirNikolas, а где у тебя запускается первый таймер?

 

SirNikolasДата: Пятница, 22 Июня 2012, 09:10:44 | Сообщение # 5
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Там, где должна начинаться музыка. При ините, например.

 

FatalBladeДата: Воскресенье, 24 Июня 2012, 16:07:07 | Сообщение # 6
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Народ. Подскажите плз, почему у некоторых игроков данный алгоритм с музыкой работает, а у некоторых нет? У тех что не работает, проигрывается стандартная варкрафтовская музыка. Зависит от расы. За андедов играет то что я хочу, а вот за людей стандартная. В чём дело? Как это исправить?



Сообщение отредактировал FatalBlade - Воскресенье, 24 Июня 2012, 16:21:08
 

DiabfallДата: Воскресенье, 24 Июня 2012, 16:25:49 | Сообщение # 7
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
Хз, музыкальный список чистить пробовал?
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Функция, вызывающая сама себя (Желательно ли использовать следующую функцию?)
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz