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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Таймеры
Таймеры
Kr0nusДата: Воскресенье, 31 Июля 2011, 15:08:23 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
Мне нужно сделать секундную задержку в цикле:
Code
    loop
     exitwhen i > 5
     set x = GetUnitX(b)
     set y = GetUnitY(b)
     call SetUnitPosition(a,x,y)
     call SetUnitAnimation(a,"attack")
     set i = i + 1
     endloop

Как это сделать через таймеры?


 

FaionДата: Воскресенье, 31 Июля 2011, 15:18:36 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
TimerStart(t,1.0,true,function yourfunc)

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL


Сообщение отредактировал Faion - Воскресенье, 31 Июля 2011, 15:18:49
 

Kr0nusДата: Воскресенье, 31 Июля 2011, 15:26:09 | Сообщение # 3
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
Faion,
Quote (Faion)
TimerStart(t,1.0,true,function yourfunc)

Ну если я правильно понимаю так можно сделать паузу перед включением функции а использовать таймер чтобы сделать паузу в цикле?Если можешь напиши пожалуйста пример.


 

lawsonДата: Воскресенье, 31 Июля 2011, 15:36:39 | Сообщение # 4
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Kr0nus)
Мне нужно сделать секундную задержку в цикле:

Чередующееся событие или действие по истечению времени это таймер, а цикл выполнение действий до определенного условия.
Для твоего варианта ипользутеся таймер!


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


Сообщение отредактировал lawson - Воскресенье, 31 Июля 2011, 15:40:26
 

Kr0nusДата: Воскресенье, 31 Июля 2011, 15:40:49 | Сообщение # 5
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
lawson,
Quote (lawson)
Для твоего варианта ипользутеся таймер!

Quote (Kr0nus)

Как это сделать через таймеры?


 

lawsonДата: Воскресенье, 31 Июля 2011, 15:42:57 | Сообщение # 6
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Kr0nus,
Ты внимательней читай сообщения!

Code
call TimerStart(t, 1, true, function yourFunc)


Code
function YourFunc takes nothing returns nothing
set x = GetUnitX(b)
set y = GetUnitY(b)
call SetUnitPosition(a,x,y)
call SetUnitAnimation(a,"attack")
endfunction

В цикле нельзя ставить паузы у тебя процесоор будет виснуть до тех пор пока цикл не выполнится!!!
Code
loop
exitwhen i > 5
set x = GetUnitX(b)
set y = GetUnitY(b)
call SetUnitPosition(a,x,y)
call SetUnitAnimation(a,"attack")
set i = i + 1
пауза на 1 сек
endloop

в данном случае у тебя будет 5 секунд лаг!


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


Сообщение отредактировал lawson - Воскресенье, 31 Июля 2011, 15:47:52
 

Kr0nusДата: Воскресенье, 31 Июля 2011, 15:47:44 | Сообщение # 7
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
lawson,
Я рассматривал этот вариант,но мне надо чтобы эта функция сработала 5 раз и на этом закончилась,будет ли выполнятся это,при том что ты написал?


 

lawsonДата: Воскресенье, 31 Июля 2011, 15:49:20 | Сообщение # 8
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Kr0nus,
Чета ты не доганяешь!
Пфф ладно на примере тебе покажу. Поставь в цикл PolledWait на 1 секунду увидишь что будет сразу поймешь что я имею ввиду.
Еще раз говорю цикл нелзя останавливать!!!! Всякими таймерами Вэйтами, взятками!


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

Kr0nusДата: Воскресенье, 31 Июля 2011, 15:51:04 | Сообщение # 9
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
lawson, Я уже говорю не о цикле а об этом:
Code
function YourFunc takes nothing returns nothing
set x = GetUnitX(b)
set y = GetUnitY(b)
call SetUnitPosition(a,x,y)
call SetUnitAnimation(a,"attack")
endfunction


 

lawsonДата: Воскресенье, 31 Июля 2011, 15:51:13 | Сообщение # 10
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Kr0nus)
но мне надо чтобы эта функция сработала 5 раз и на этом закончилась

function YourFunc takes nothing returns nothing
set global i = i + 1
set x = GetUnitX(b)
set y = GetUnitY(b)
call SetUnitPosition(a,x,y)
call SetUnitAnimation(a,"attack")
if (i) >= 5 then
call DestroyTimer(GetExpiredTimer())
endif
endfunction

global значит что переменная должна быть глобальной или через хеш сохраняй ее.


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


Сообщение отредактировал lawson - Воскресенье, 31 Июля 2011, 15:51:59
 

Kr0nusДата: Воскресенье, 31 Июля 2011, 15:58:02 | Сообщение # 11
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
Quote (lawson)
function YourFunc takes nothing returns nothing
set global i = i + 1
set x = GetUnitX(b)
set y = GetUnitY(b)
call SetUnitPosition(a,x,y)
call SetUnitAnimation(a,"attack")
if (i) >= 5 then
call DestroyTimer(GetExpiredTimer())
endif
endfunction

По-моему ты все же не понял что я хочу.Объясню,что я хочу сделать.
Герой кастует спелл,телепортируется к цели с промежутками в 1 секунду и атакует.


 

lawsonДата: Воскресенье, 31 Июля 2011, 16:03:11 | Сообщение # 12
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Kr0nus)
Герой кастует спелл,телепортируется к цели с промежутками в 1 секунду и атакует.

Code
function YourFunc takes nothing returns nothing
set i = i + 1
set x = GetUnitX(b)
set y = GetUnitY(b)
call SetUnitPosition(a,x,y)
call SetUnitAnimation(a,"attack")

if (i >= 5) then
call DestroyTimer(GetExpiredTimer())
endif
endfunction

call TimerStart(t, 1, true, function yourFunc)


Ты до сих пор не понял?


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


Сообщение отредактировал lawson - Воскресенье, 31 Июля 2011, 16:03:37
 

Kr0nusДата: Воскресенье, 31 Июля 2011, 16:28:39 | Сообщение # 13
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
lawson,
Quote (lawson)
Ты до сих пор не понял?

Все,разобрался :)
Огромное спасибо.

Добавлено (31-07-2011, 16:28)
---------------------------------------------
lawson,
Теперь у меня триггер не работает...

Code
function Trig_Slash_Conditions takes nothing returns boolean
     if ( not ( GetSpellAbilityId() == 'A000' ) ) then
         return false
     endif
     return true
endfunction

function Trig_Slash_Actions takes nothing returns nothing
     local unit caster = GetSpellAbilityUnit()
     local unit target = GetSpellTargetUnit()
     set udg_caster = caster
     set udg_target = target
     local timer t = CreateTimer()
     call TimerStart( t, 1.00, true, function Slashes )
     set caster = null
     set target = null
endfunction

function Slashes takes nothing returns nothing
     set udg_integer = udg_integer + 1
     local unit caster = udg_caster
     local unit target = udg_target
     local real x = GetUnitX(target)
     local real y = GetUnitY(target)
     call SetUnitPosition(caster,x,y)
     call SetUnitAnimation(caster,"attack")
         if (udg_integer >= 5) then
             set udg_integer = null
             call DestroyTimer(GetExpiredTimer())
         endif
     set caster = null
     set target = null
endfunction

//===========================================================================
function InitTrig_Slash takes nothing returns nothing
     set gg_trg_Slash = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_Slash, EVENT_PLAYER_UNIT_SPELL_CAST )
     call TriggerAddCondition( gg_trg_Slash, Condition( function Trig_Slash_Conditions ) )
     call TriggerAddAction( gg_trg_Slash, function Trig_Slash_Actions )
endfunction


 

lawsonДата: Воскресенье, 31 Июля 2011, 16:33:58 | Сообщение # 14
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Kr0nus,
Функция которую вызывает таймер всегда должна быть выше той функции где таймер создается. Поменяй местами функции!


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


Сообщение отредактировал lawson - Воскресенье, 31 Июля 2011, 16:34:25
 

Kr0nusДата: Воскресенье, 31 Июля 2011, 16:34:29 | Сообщение # 15
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
lawson,
Поменял,но карта все так же не запускается
Code
function Trig_Slash_Conditions takes nothing returns boolean
     if ( not ( GetSpellAbilityId() == 'A000' ) ) then
         return false
     endif
     return true
endfunction

function Slashes takes nothing returns nothing
     set udg_integer = udg_integer + 1
     local unit caster = udg_caster
     local unit target = udg_target
     local real x = GetUnitX(target)
     local real y = GetUnitY(target)
     call SetUnitPosition(caster,x,y)
     call SetUnitAnimation(caster,"attack")
         if (udg_integer >= 5) then
             set udg_integer = null
             call DestroyTimer(GetExpiredTimer())
         endif
     set caster = null
     set target = null
endfunction

function Trig_Slash_Actions takes nothing returns nothing
     local unit caster = GetSpellAbilityUnit()
     local unit target = GetSpellTargetUnit()
     set udg_caster = caster
     set udg_target = target
     local timer t = CreateTimer()
     call TimerStart( t, 1.00, true, function Slashes )
     set caster = null
     set target = null
endfunction

//===========================================================================
function InitTrig_Slash takes nothing returns nothing
     set gg_trg_Slash = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_Slash, EVENT_PLAYER_UNIT_SPELL_CAST )
     call TriggerAddCondition( gg_trg_Slash, Condition( function Trig_Slash_Conditions ) )
     call TriggerAddAction( gg_trg_Slash, function Trig_Slash_Actions )
endfunction


 

lawsonДата: Воскресенье, 31 Июля 2011, 16:44:17 | Сообщение # 16
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
set udg_integer = null
что это такое как ты можешь null приписать перменной integer?
Мда тебе еще учить и учить жасс.
Куча бестолковый действий!

Добавлено (31-07-2011, 16:44)
---------------------------------------------
Quote (lawson)
   local timer t = CreateTimer()

А это что такое почему объявляется локальная перменная после начала действий?
Это всегда делается перед начало любых действий!


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


Сообщение отредактировал lawson - Воскресенье, 31 Июля 2011, 16:44:53
 

Kr0nusДата: Воскресенье, 31 Июля 2011, 16:49:13 | Сообщение # 17
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
lawson, Ну тогда скинь мне,если можешь,наработку,чтобы я разобрался

 

lawsonДата: Воскресенье, 31 Июля 2011, 16:53:54 | Сообщение # 18
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
держи

function Trig_Slash_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A000'
endfunction

function Slashes takes nothing returns nothing
local unit caster = udg_caster
local unit target = udg_target
local real x = GetUnitX(target)
local real y = GetUnitY(target)
set udg_integer = udg_integer + 1
call SetUnitPosition(caster,x,y)
call SetUnitAnimation(caster,"attack")
if (udg_integer >= 5) then
set udg_integer = 0
call DestroyTimer(GetExpiredTimer())
endif
set caster = null
set target = null
endfunction

function Trig_Slash_Actions takes nothing returns nothing
local unit caster = GetSpellAbilityUnit()
local unit target = GetSpellTargetUnit()
local timer t = CreateTimer()
set udg_caster = caster
set udg_target = target
call TimerStart( t, 1.00, true, function Slashes )
set caster = null
set target = null
set t = null
endfunction

//===========================================================================
function InitTrig_Slash takes nothing returns nothing
set gg_trg_Slash = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Slash, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_Slash, Condition( function Trig_Slash_Conditions ) )
call TriggerAddAction( gg_trg_Slash, function Trig_Slash_Actions )
endfunction


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


Сообщение отредактировал lawson - Воскресенье, 31 Июля 2011, 16:55:21
 

Kr0nusДата: Воскресенье, 31 Июля 2011, 17:01:42 | Сообщение # 19
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
lawson, Спасибо
Тему можно закрыть




Сообщение отредактировал Kr0nus - Воскресенье, 31 Июля 2011, 17:36:33
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Таймеры
  • Страница 1 из 1
  • 1
Поиск:

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