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

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

Ответ
 
Arcane

offline
Опыт: 174
Активность:
Water System
Система позволяет плавно менять цвет воды в любое время игры.
Выполнено на jass, прошу оценить код, т.к я новичок в этом деле... Система я думаю хоть и проста но не бесполезна, я уже видел на форуме, ктото просил сделать подобное и вот решил попробовать.

v1.1
Оптимизирован код
Прикрепленные файлы
Тип файла: w3x Water System.w3x (13.9 Кбайт, 51 просмотров )
Тип файла: w3x Water System v1.1.w3x (12.8 Кбайт, 84 просмотров )

Отредактировано Arcane, 21.06.2008 в 22:25.
Старый 21.06.2008, 19:42
J
expert
offline
Опыт: 48,447
Активность:
ну... много недочетов, но для новичка неплохо...
системой это назвать сложно, скорее просто показательный пример...
Старый 21.06.2008, 20:08
NCrashed

offline
Опыт: 13,553
Активность:
утечек не нашел. Система довольна проста и меняет всю воду. Насчет отдельной смене цвета можно использовать цветные дудады-плиты (идея Happy_Horror)
Старый 21.06.2008, 20:18
Arcane

offline
Опыт: 174
Активность:
Спасибо.
Цитата:
ну... много недочетов

Можно поподробнее, я всетаки учусь
Старый 21.06.2008, 21:55
J
expert
offline
Опыт: 48,447
Активность:
1) используй Jass New Gen Pack
в частности способность обьявления глабалок прям в коде
2) не создавай каждый раз новый таймер, создай один при старте карты и используй его
4) не передавай в функцию пораметр "шага" времени, обьяви его как глобальную константную переменую, и создавай таймер с периодом этой глобалки
3) в функции ws_SetWaterColor() последнии 2 параметра убери, замени их одним параметром real time, т.е. время за которое должно произойти изменение
тогда в этой функции находи скорость изменения r/g/b за о дин шаг времени и передавай в теймер (также и время передавай) в котором собствено к текущему значению и прибовляй эти скорости пока время больше нуля (периодически отнимай от времени глобалку одного шага времени)
Старый 21.06.2008, 22:12
Arcane

offline
Опыт: 174
Активность:
Jon, грузанул по полной) Спасибо, переделаю...
Старый 21.06.2008, 22:16
Korneliy
DMF
offline
Опыт: 23,443
Активность:
понравилось, даже очень. хоть и малоприменимо.
Старый 21.06.2008, 22:16
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
утечек не нашел

утечка есть, из-за того что используются локальные таймеры, а не один глобальный, если запустить изменение цвета, а потом пока оно не закончилось запустить другое, то первый таймер не удалится - утечка
Старый 21.06.2008, 22:17
Arcane

offline
Опыт: 174
Активность:
Утечка исправлена, код немного подправил, смотрите, можт че еще нитак...
Jon, извини, с реал таймом бошка щас неварит)
Старый 21.06.2008, 22:26
J
expert
offline
Опыт: 48,447
Активность:
триггер Water System
Код:
globals // чтобы использовать такую конструкцию нужно делать через JassNewGenPack
    constant timer SW_Timer = CreateTimer()
    real SW_Time
    real SW_R = 255
    real SW_G = 255
    real SW_B = 255
    real SW_A = 255
    real SW_RS
    real SW_GS
    real SW_BS
    real SW_AS
    constant real SW_period = 0.04
endglobals

function ws_SetWaterColor_Child takes nothing returns nothing
    set SW_Time = SW_Time - SW_period
    set SW_R = SW_R + SW_RS
    set SW_G = SW_G + SW_GS
    set SW_B = SW_B + SW_BS
    set SW_A = SW_A + SW_AS
    call SetWaterBaseColor(R2I(SW_R), R2I(SW_G), R2I(SW_B), R2I(SW_A))
    if SW_Time <= 0 then
        call PauseTimer(GetExpiredTimer())
    endif
endfunction

function ws_SetWaterColor takes integer r, integer g, integer b, integer a, real time returns nothing
    set SW_Time = time 
    set SW_RS = (r-SW_R)/time*SW_period
    set SW_GS = (g-SW_G)/time*SW_period
    set SW_BS = (b-SW_B)/time*SW_period
    set SW_AS = (a-SW_A)/time*SW_period
    call TimerStart(SW_Timer, SW_period, true, function ws_SetWaterColor_Child)
endfunction

function InitTrig_Water_System takes nothing returns nothing
endfunction

тригер при нажатии на esc
Код:
События
  Игрок - Игрок 1 (Красный) skips a cinematic sequence
Условия
Действия
  Custom script: set udg_b = not udg_b
  Custom script: if udg_b then
  Custom script:   call ws_SetWaterColor(255, 255, 255, 255, 2)
  Custom script: else
  Custom script:   call ws_SetWaterColor(0, 0, 0, 255, 2)
  Custom script: endif

Отредактировано Jon, 21.06.2008 в 22:56.
Старый 21.06.2008, 22:47
Arcane

offline
Опыт: 174
Активность:
Jon, спасибо. Что, в новой версии написать Created by Arcane and JON?
Старый 21.06.2008, 22:55
J
expert
offline
Опыт: 48,447
Активность:
автоство оставляй свое, мне не нужно, да и на таком уровне это не имеет значения, я хочу чтобы ты сравнил коды, и увидел все свои ошибки
Старый 21.06.2008, 22:57
Arcane

offline
Опыт: 174
Активность:
Jon, сделал как у тебя, но почемуто не работает... Такой простой алгоритм, но я чет нивкакую немогу его построить...
Прикрепленные файлы
Тип файла: w3x Water System v1.2.w3x (12.8 Кбайт, 33 просмотров )
Старый 22.06.2008, 08:46
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от Jon
тригер при нажатии на esc

Код:
События
  Игрок - Игрок 1 (Красный) skips a cinematic sequence
Условия
Действия
  Custom script: set udg_b = not udg_b
  Custom script: if udg_b then
  Custom script:   call ws_SetWaterColor(255, 255, 255, 255, 2)
  Custom script: else
  Custom script:   call ws_SetWaterColor(0, 0, 0, 255, 2)
  Custom script: endif

сравни с тем что написал ты...

принята указывать в альфа канале не прозрачность, а видимость...

Отредактировано Jon, 22.06.2008 в 17:49.
Старый 22.06.2008, 17:41
Arcane

offline
Опыт: 174
Активность:
Jon, спасибо) я еще в обед разобрался... туплю...
Старый 22.06.2008, 18:11
Ответ

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

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

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

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



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