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

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

Ответ
 
malcoriel

offline
Опыт: 695
Активность:
Ability comparision
Сравнение абилок - почему-то очень трудоемкая для компа вещь. Начиная этак с 10-ти сравнений тормоза вара уже ощутимы. Подскажите, чем это можно заменить?
Старый 15.07.2006, 21:21
DioD

offline
Опыт: 45,184
Активность:
Первый раз слышу про это, код в студию
Старый 16.07.2006, 08:11
malcoriel

offline
Опыт: 695
Активность:
Хм ну вот смотри
-Юнит начинает применять способность
if abilty being cast равно <ability1>
то - <действие1>
иначе - if abilty being cast равно <ability2>
то - <действие2>
иначе - if abilty being cast равно <ability3>
то - <действие3>
И так далее. У меня была идея сравнивать не сами абилки, а их названия String comparison`ом. Вот не знаю, проканает или нет, надо попробовать
Сорри за корявое написание, я тут на форуме еще не совсем разобрался со смещением
текста.Короче - оно сравнивает ability being cast с эталонами, пока не найдет совпадение и выполняет действиеЮ ему соответствующее
Старый 16.07.2006, 08:45
DioD

offline
Опыт: 45,184
Активность:
Делай для каждой абилки отдельный тригер
Старый 16.07.2006, 08:57
malcoriel

offline
Опыт: 695
Активность:
Хм ладно попробую
Старый 16.07.2006, 14:50
dk

offline
Опыт: 61,843
Активность:
Или переведи на Jass и сделай нормальные условия, а не ссылки на функции. Во всяком случае торможение уменьшится!
Старый 16.07.2006, 15:25
DioD

offline
Опыт: 45,184
Активность:
Условия не вызывают тормозов так как не передают чего либо
Старый 16.07.2006, 15:59
B100D E1F
Scarecrow
offline
Опыт: 4,869
Активность:
Тут по-любому лучше все раскласть по разным тригам. У меня в карте около 15 триггерных абилок, и ниче не тормозит!
Старый 16.07.2006, 18:33
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Цитата:
Условия не вызывают тормозов так как не передают чего либо

На самом деле джасс интерпретируемый язык и тормоза там вызывает все...

exploder добавил:
Цитата:
Сорри за корявое написание, я тут на форуме еще не совсем разобрался со смещением
текста.Короче - оно сравнивает ability being cast с эталонами, пока не найдет совпадение и выполняет действиеЮ ему соответствующее

Может тормоза действительно из-за множественного вызова функции в кондишене... Все эти кондишены проверяются в момент любого каста, что действительно может лагать. Попоробуй сделать так: тригер по событию каста, без условий, потом в действиях некой глобальной переменной присваивается Ability Being Cast, а дальше стоят условные блоки сравнивающие значение глобалки и значения. Внутри условных блоков действия. То бишь:
Event: Unit Begin Cast
Condition: ---
Actions:
Set TmpAbility = Ability Being Cast
if TmpAbilty == <abil1> then
blah blah
endif
...
и т.д.
Старый 16.07.2006, 19:28
GadenbIsh
Просто Гад
offline
Опыт: 70,430
Активность:
если так сделать, то он тоже, при каждом касте, каждый раз будет сравнивать абилы, только не в условии
все триггерные абилы в 1 триггере = маразм - вот такое условие добавь=)
Старый 16.07.2006, 20:21
malcoriel

offline
Опыт: 695
Активность:
Цитата:
Сообщение от exploder


Попоробуй сделать так: тригер по событию каста, без условий, потом в действиях некой глобальной переменной присваивается Ability Being Cast, а дальше стоят условные блоки сравнивающие значение глобалки и значения. Внутри условных блоков действия. То бишь:
Event: Unit Begin Cast
Condition: ---
Actions:
Set TmpAbility = Ability Being Cast
if TmpAbilty == <abil1> then
blah blah
endif
...
и т.д.


Классная идея! Спасибо. Ща проверю
Старый 16.07.2006, 21:30
GadenbIsh
Просто Гад
offline
Опыт: 70,430
Активность:
ниче классного не вижу....
кто тебе на дает сделать по триггеру на абилу?
Старый 16.07.2006, 21:35
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Цитата:
если так сделать, то он тоже, при каждом касте, каждый раз будет сравнивать абилы, только не в условии

В этом случает функция возвращающая текущую кастованную абилу вызывается один раз...

exploder добавил:
Мне кажется что лагают не сами условия в именно вызов функций...
Старый 16.07.2006, 21:48
GadenbIsh
Просто Гад
offline
Опыт: 70,430
Активность:
а... в этом смысле... ну хз
Старый 16.07.2006, 21:50
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
Вот у меня вопрос как-раз с переводом трига в джасс. Хотел условия написать без функций - не получилось( пишет, что неправильное условие... пытался написать вместо нескольких функций свою (с параметрами) - при ее вызове, пишет "не хватает символа ' ".
Старый 17.07.2006, 14:11
J
expert
offline
Опыт: 48,747
Активность:
Цитата:
Сообщение от senatus
Хотел условия написать без функций - не получилось

вот маленький примерчик
» при переводе в жаз
Код:
function Trig_trig_Func001C takes nothing returns boolean
    if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_trig_Actions takes nothing returns nothing
    if ( Trig_trig_Func001C() ) then
        // action
    else
    endif
endfunction

» можно упрастить так
Код:
function Trig_trig_Actions takes nothing returns nothing
    if IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) == true then
        // action
    else
    endif
endfunction

это если я прально тебя понял

Отредактировано Jon, 17.07.2006 в 14:37.
Старый 17.07.2006, 14:32
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
ты меня правильно понял. Только у меня упростить не получилось. Условие было такое:
Присвоить переменной рэндомного юнита, из всех юнитов, находящихся в такой-то области возле применившего заклинание, которые соответствуют условию: юнит является врагом юниту, применившему заклинание и юнит не является udg_UnitTemp. Для проверки условий использовалась одна функция, которая сравнивала boolean return'ы двух других функций, которые сама же и вызывала.

senatus добавил:
Я прописал вроде все условия, только мне we отвечал, что это не правильно
Старый 17.07.2006, 14:41
J
expert
offline
Опыт: 48,747
Активность:
Код:
function Trig_a_Actions takes nothing returns nothing
    if GetPlayerAlliance(GetOwningPlayer(udg_UNIT), GetOwningPlayer(GetSpellAbilityUnit()), ALLIANCE_PASSIVE) == false and udg_UNIT != udg_UnitTemp then
        // action
    else
    endif
endfunction

При условии что UNIT враг юнита который применил спел, и при том что UNIT не равен udg_UnitTemp выполнятся действия

Отредактировано Jon, 17.07.2006 в 14:53.
Старый 17.07.2006, 14:47
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
проблема не в том, что я не знаю как этовыглядит) у меня все было в тригах - я их перевел в Jass. Проблема в том, что я хотел просто в одном условии задать все параметры. + я хотел сделать на локальных переменных, а вызванные функции их не видят. Хотел передать эти переменные как параметры - хрен. Пишет, что не хватает этого гребанного апострофа.
Старый 17.07.2006, 14:50
J
expert
offline
Опыт: 48,747
Активность:
всеже я до сих пор не понял почемуу тя не получается.. видимо ты чето не прально делаеш.. можеш выложить код... если слишком громозкий то в теге cut чтобы не привлекал внимания:D
Старый 17.07.2006, 15:03
Ответ

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

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

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

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



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