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

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

Ответ
 
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
[Уроки] Помощь нубу
Собсна у меня извечная проблема - практика... Вроде почитал статьи и всё понял, но реализировать мало что приходится. Давай, опытные джаззеры, задания, если не трудно. Начните с простых потом сложные. Буду прилежно (надеюсь) учится.
Заранее всем спасибо!
Старый 29.12.2006, 18:58
DioD

offline
Опыт: 45,184
Активность:
как вам должно быть известно триггеры с периодом = таймеры.
напишите на джаз пожалуста пару функций а еслипонадобитьсято больше, что будут производить действия с малым периодом используя триггер.
Старый 29.12.2006, 19:01
J
expert
offline
Опыт: 48,747
Активность:
задание - сделай функцию (которая принимает скорость, угол и юнита) которая создает таймер и двинает юнита согласно пораметрам... работает со сколько угодно количеством юнитов...
такое сможеш сделать?
Старый 29.12.2006, 19:01
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
DioD, Jon, ок попробую...

N.Sy.Prophet добавил:
Jon
» код

Код:
function Move takes nothing returns nothing
    local unit u
    local integer s
    local integer n
    local integer d
    set u[n] = GetTriggerUnit
    set n = n + 1
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 10
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        call SetUnitPositionLoc( u[n], PolarProjectionBJ(Position(u[n])(GetPlayableMapRect()), s, d) )
        call TriggerSleepAction( 0.10 )
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    set n = n - 1
endfunction

s - скорость(???); n - номер юнита в массиве; d - градусы

наверняка куча ошибок... просьба указать их.
Старый 29.12.2006, 19:33
J
expert
offline
Опыт: 48,747
Активность:
N.Sy.Prophet хех.. он у тебя будет двингатся рывками, потом цакл явно скатан с GUI
щас тебе покажу как надо было
темболее параметры принимаются не локальными перемеными, а прямо в в заголовке функции
неоптимильно - создается много точек, и используются лажовые функции:)
да и ваще небудет работать^^

Отредактировано Jon, 29.12.2006 в 19:52.
Старый 29.12.2006, 19:35
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
Буду благодарен. Про цикл - ты прав.!)
Старый 29.12.2006, 19:43
J
expert
offline
Опыт: 48,747
Активность:
Код:
function Move_Timer takes nothing returns nothing
    local timer Tm = GetExpiredTimer ()
    local unit u      = I2U(GetStoredInteger (udg_Cache, I2S(H2I(Tm)), "u"    ))
    local real Ang    =     GetStoredReal    (udg_Cache, I2S(H2I(Tm)), "Ang"  )
    local real Speed  =     GetStoredReal    (udg_Cache, I2S(H2I(Tm)), "Speed")
    call SetUnitPosition (u, GetUnitX(u) + Speed*Cos(Ang*bj_DEGTORAD), GetUnitY(u) + Speed*Sin(Ang*bj_DEGTORAD))
    set Timer = null
    set u     = null    
endfunction

function Move takes unit u, real Speed, real Ang returns nothing
    local timer Tm = CreateTimer ()
    call TimerStart (Timer, 0.04, true, function Move_Timer)
    call StoreReal    (udg_Cache, I2S(H2I(Tm)), "Speed", Speed )
    call StoreReal    (udg_Cache, I2S(H2I(Tm)), "Ang"  , Ang   )
    call StoreInteger (udg_Cache, I2S(H2I(Tm)), "u"    , H2I(u))
    set Timer = null
endfunction

call Move (Юнит, Скорость, Угл)
только придутся инициализировать кеш сначало...

Отредактировано Jon, 29.12.2006 в 19:53.
Старый 29.12.2006, 19:46
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
Спасибо, надо изучить... Будет время - сделаю задание Диода, сейчас немного занят.
Старый 29.12.2006, 20:00
ArchWorm
Матрица незалежности
offline
Опыт: 4,675
Активность:
Я лично, не понял, чего хочет DioD. Чтобы триггер был с событием на малый период?
N.Sy.Prophet, Usus magister est optimus, давай, дерзай.
У меня тоже есть для тебя задачка:
Ияпользуя описанный Джоном принцип, создай функцию, отлавливающую столкновение снаряда (обычного) с юнитом, при условии, что мы знаем координаты источника и цели и скорость снаряда.
Если слишком сложно, говори, помогу.
Старый 01.01.2007, 04:09
DioD

offline
Опыт: 45,184
Активность:
то-же самое что написал джон но не на таймере а на триггере
как раз про болт, так как столкновение и движение можно запрограмировать в одну единственную функцию.
Старый 01.01.2007, 12:11
ArchWorm
Матрица незалежности
offline
Опыт: 4,675
Активность:
DioD, а если без использования вспомогательного юнита?
Старый 01.01.2007, 12:35
DioD

offline
Опыт: 45,184
Активность:
можно и без юнита, рект двигать не сложно, можно вообще через спецефект и просчитывать столкновение через формулу
Старый 01.01.2007, 13:26
ArchWorm
Матрица незалежности
offline
Опыт: 4,675
Активность:
DioD, во-во. Рект криво пашет, поэтому я предпочитаю плясать от точки. Всё равно, фактически, юнит здесь - это локация.
Старый 02.01.2007, 15:19
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
Код:
function periodevent_Actions takes nothing returns nothing
    call функция_Джона
endfunction

//===========================================================================
function Init_periodevent takes nothing returns nothing
    set periodevent = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( periodevent, n )
    call TriggerAddAction( periodevent, function periodevent_Actions )
endfunction

я совсем дураг, да? :)

N.Sy.Prophet добавил:
n - период...
Старый 02.01.2007, 15:41
adic3x

offline
Опыт: 107,539
Активность:
Лично я предпочитаю
Код:
TriggerRegisterTimerEvent(trig, timeout, true)
место
Код:
TriggerRegisterTimerEventPeriodic( periodevent, n )


ADOLF добавил:
И еще, никогда не пиши в коде на Русском - плохая примета)

ADOLF добавил:
Jon, а кста, что , real обнулять ненадо? просто незнаю)
Старый 02.01.2007, 15:53
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Цитата:
Лично я предпочитаю

А смысл?
Старый 02.01.2007, 15:54
adic3x

offline
Опыт: 107,539
Активность:
exploder, из одной вызывать другую... Просто не иститически ето)
Старый 02.01.2007, 15:56
J
expert
offline
Опыт: 48,747
Активность:
Цитата:
Jon, а кста, что , real обнулять ненадо? просто незнаю)

нет

N.Sy.Prophet неправельно триг создаеш.. надо так:
Код:
function Init_periodevent takes nothing returns nothing
    local trigger periodevent = CreateTrigger(  )
    call TriggerRegisterTimerEvent( periodevent, n, true )
    call TriggerAddAction( periodevent, function periodevent_Actions )
    set periodevent = null
endfunction


и вообще все неправельно
надо просто одну функцию... просто однуа..
call Функция жона (Юнит, Скорость, угол)
и все.. и юнит начинает движение
ненадо делать через периодический тригер, запускай ее где угодно

Отредактировано Jon, 02.01.2007 в 16:09.
Старый 02.01.2007, 16:00
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Имхо самый кул способ это вешать функцию на таймер - ака код приведеный Жоном...
Старый 02.01.2007, 16:01
adic3x

offline
Опыт: 107,539
Активность:
Jon, ну а триг надо хоть обнулять то? и еще заносить триг в локалу... А если его вырубать потом?
Старый 02.01.2007, 16:08
Ответ

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

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

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

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



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