Ну, это я понимаю, да и потом - в Win7 Ultimate есть такая удобная вещь, как XP-mode. Чуть сыроватая - производительность иногда падает, баги странные появляются, но в то же время работает...
Quote (SirNikolas)
Quote (AnyOne697)
А вот это зачем?..
Раскрытие BJ.
А подробнее информации есть, что это за BJ и с чем его едят... И тем более, зачем здесь условие? Для того, чтобы камера применялась на одного игрока?..
Я у узнал, что у меня Есть огромная семья: Монитор, системный блок, В сеть воткнул я проводок, Windows - небо голубое... Это всё моё - родное! Без инета жить нельзя - Наркоман наверно я!
BJ функции - подарочный набор от Blizzard. По сути представляют из себя набор из других, более простых функций. Например:
Code
native CreateUnit takes player id, integer unitid, real x, real y, real face returns unit //Обычная функция создания юнита.
function CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group //BJ-вариант, внутри содержит ЕЩЁ одну BJ-функцию, которая в конце концов опять же вызывает CreateUnit().
Кроме того порой можно увидеть такое:
Code
function DestroyEffectBJ takes effect whichEffect returns nothing call DestroyEffect(whichEffect) endfunction
Вызов функции DestroyEffectBJ приведёт к вызову DestroyEffect с тем же набором параметров... В лучшем случае всё это кушает ресурсы как ребёнок конфеты, но не более. В худшем BJ-функции ещё и содержат утечки памяти, тогда их использование особенно накладно.
Впрочем, делая, например, киниматику можно пренебречь этим, ибо если вызов происходит 1-2 раза за игру, то ничего страшного не будет. При создании мощных систем использование только native-функций - стандарт де факто.
AnyOne697, я тебе вот что скажу. На кой _)( ты вызываешь лишнюю функцию?
Quote (AnyOne697)
function rmvHeroOnArray takes integer hero returns nothing local integer i local integer temp loop if(udg_AllHeroes[0] == hero) then //да... и кстати, откуда здесь нумерация идёт... всё забываю... set temp = i endif set i = i + 1 exitwhen(i == 16) endloop set udg_AllHeroes[temp] = udg_AllHeroes[udg_AllHeroInteger - 1] set udg_AllHeroInteger = udg_AllHeroInteger - 1 endfunction
function createRndHeroForPlayerByNumber takes player pl returns nothing local integer i = GetRandomInt( 1, udg_AllHeroInteger ) local unit rndHero = udg_AllHeroes[i] local integer x = 0 local unit u //udg_hash = InitHashtableBJ() при инициализации call SaveInteger( udg_hash, 0, 0, LoadInteger( udg_hash, 0, 0 ) - 1 ) //call CreateNUnitsAtLoc( 1, udg_AllHeroes[rndTemp], ConvertedPlayer(num), GetPlayerStartLocationLoc(Player(cmdNum + 9)), bj_UNIT_FACING ) //Кто-то интересно так делает... Создает юнита для ИгрокХ, а помещает в стартовую локацию ИгрокХ+9 ??? set u = CreateUnit( pl, GetUnitTypeId( rndHero ), GetStartLocationX(GetPlayerStartLocation(pl)), GetStartLocationY(GetPlayerStartLocation(pl)), 0 ) set udg_AllHeroes[i] = udg_AllHeroes[udg_AllHeroInteger] set udg_AllHeroInteger = udg_AllHeroInteger - 1 if GetLocalPlayer() == pl then // Use only local code (no net traffic) within this block to avoid desyncs. call PanCameraToTimed( GetUnitX(u), GetUnitY(u), 2 ) endif set rndHero = null set pl = null set u = null endfunction
Это во-первых, во-вторых, ты считаешь, что мои сообщения, написанные строго по теме - мусор???
А подробнее информации есть, что это за BJ и с чем его едят... И тем более, зачем здесь условие? Для того, чтобы камера применялась на одного игрока?..
Для того, чтобы она применялась для игрока, у которого этот код выполняется, а не у всех сразу.
Quote (FkoFF)
Ajaccio, ну, БЖ нужны близзардам для ГУИ интерфейса.
Это оправдано, но блин вашу, типа нельзя обойтись вызовом native в таком случае?:
Quote (Ajaccio)
function DestroyEffectBJ takes effect whichEffect returns nothing call DestroyEffect(whichEffect) endfunction
Я в контакте и на warcraft3ft.info. Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
Парни сорри за флуд но почему бы вам не перейти на GUI он легче и удобнее для меня это лутше джасса и нету утечек как многие говорят что на гуи постоянные утечки это не так а с джассом много гемороя на гуи в 2 раза быстрее зделаеш чем на джассе что нибудь
Впрочем как и на jass устраняются с помощью jass rep-30011, ты не понимаешь что значит "утечка". любая информация оставшаяся в памяти, нагружающая игру, тем самым создающая лаги
на гуи в 2 раза быстрее сделаешь, чем на джассе что-нибудь
Quote
Печатать быстрее, чем кликать - Проверено, что быстрее печатать на клавиатуре, чем щелкать мышью. Поэтому JASS быстрее использовать, потому что вы набираете скрипты с клавиатуры, тогда как в GUI Вам нужно мышью кликать на нужных значениях.
Проверено что? я хоть и печатаю быстро но кликаю мышью я тоже быстро зато на джасе мне нада сидеть и парится с текстом и потом в гиганском мусоре текста мне ещё и выевлять ошибку? на гуи легче определить где ошибка и ненада рыскать в мусоре текста 1 единственную ошибочную букву!!!!!!!!!!!!!!!
Насчет ошибок - есть специальные программы, которые показывают строку с ошибкой. Вообще у JASS больше возможностей (об этом можно прочитать в этой статье), но если ты не хочешь на него переходить - не надо. Не нужно навязывать всем GUI (как, впрочем, и JASS).
Добавлено (16-01-2011, 09:06) --------------------------------------------- И давай закончим этот никому не нужный спор.
rep-30011, ГУИ медленне в работе чем Jass,Во первых при срабатывании триггера варик переводит его в жасс,если ты переведеш свой триггер в жасс ты получиш окло 50 строчек кода,если хорошо знать жасс можно оптимизировать его и будет около 10-15,Во вторых при конвертиции в текст в триггере есть такие плохие функции как BJ, которые содержат в себе еще несколько функций.Например обычное создание 1 юнита ,если перевести в Jass и посмотреть начинку может вызвать шок,но из всего этого нам понадобиться только одна строчка. И еще на гуи нельзя юзать координаты,а используеться отсталые локи которые текут неимвоерно,даже если удалять их всеравно будут лаги,хоть и не большие но будут(Проверено лично,сделал два одинаковых спелла,один с локами другой с ооординатами)
Это во-первых, во-вторых, ты считаешь, что мои сообщения, написанные строго по теме - мусор???
Ни в коем случае! Мусор я имел ввиду закомментированую строчку со старой версией вызова юнита игроку...
Quote (Ajaccio)
Code
function DestroyEffectBJ takes effect whichEffect returns nothing call DestroyEffect(whichEffect) endfunction
Вызов функции DestroyEffectBJ приведёт к вызову DestroyEffect с тем же набором параметров...
Quote (CHLSN)
Это оправдано, но блин вашу, типа нельзя обойтись вызовом native в таком случае?:
Не думаю, что это сжирает память. На самом деле, такая функция, ИМХО, при запуске игры и её использовании будут спарсена в то, что надо... Тем более - Jass - это быстро написанный язык с теми условиями, чтобы и им возможностей давал и нам не сильно надоедал. Они, близзардовцы, сами делают карты с использованием именно WE, но компы у них там куда быстрее, чем у нас простых смертный, и многие лаги сжираются тупым брутфорсом (в данном случае не "перебор", а "в лоб")...
Quote (rep-30011)
Парни сорри за флуд но почему бы вам не перейти на GUI он легче и удобнее для меня это лутше джасса и нету утечек как многие говорят что на гуи постоянные утечки это не так а с джассом много гемороя на гуи в 2 раза быстрее зделаеш чем на джассе что нибудь
Да, он легче, но никак не удобнее... Он и был создан, чтобы такие как Вы не чувствовали себя претеснёными... Утечность - это огромная проблема GUI, так как сам по себе не очень оптимизированный компилятор Jass создавал много "проходного", но не очищал память после использования (и правильно - можно очистить лишнее)... Так вот создание рандомных точек - очень утечно... Поэтому нужно пользоваться Destroy- функциями. Писать на триггерах и в правду получается быстрее, поэтому лучше всего использовать смесь триггеров и Jass - первым выполнять стандартные задачи, а вторым делать некоторые нестандартные функции, устранять утечки и оптимизировать не оптимизированные функции.
По поводу тупости GUI, вроде выведение условий в отдельную функцию или вызова функции, вызывающей функцию с аналогичными параметрами - это несколько раздражает, но почти не снижает производительности. Очень важно понимать, что куда сильнее снижает производительность, например, вычисление шейдеров и сложные рекурсивные функции нахождения пути юнита, которые нам писать не надо - они стандартные для игры. Но то, как они понижают производительность, никогда не сравниться с тем, как снижает производительность сама игра. А утечность - странная вещь. Скорее всего, это не сами утечки в память (согласитесь, 6 гигабайт оперативы должно хватить для любой карты, если её хватает для массива из 10000x10000 long long переменных (64 бит = 8 байт)), а вот то что это может быть какой-то, не знаю, размножающийся мусор, что ли, но вряд ли... Ну... В общем, как бы то ни было, это, ИМХО, неоптимизированность самой игры.
Quote (rep-30011)
Quote (SirNikolas)
Печатать быстрее, чем кликать - Проверено
Проверено что? я хоть и печатаю быстро но кликаю мышью я тоже быстро зато на джасе мне нада сидеть и парится с текстом и потом в гиганском мусоре текста мне ещё и выевлять ошибку? на гуи легче определить где ошибка и ненада рыскать в мусоре текста 1 единственную ошибочную букву!!!!!!!!!!!!!!!
Не знаю, но кликаю я почти с такой же скоростью... На GUI приходиться постоянно искать в списке нужное действие, например, а при реализации огромных триггерных систем можно потратить много время на обдумывание, а как здесь поступить... Очень много говорит задача на FireBall...
Печатаю я и вправду быстро... Но всех функций точно не помню! Да и не знаю того, кто все их помнит. Поэтому надо либо конвертить GUI триггер в Jass либо юзать что-то вроде Jass-Craft...
В общем мой выбор - Mix(GUI-Trigger, Jass-Trigger). Было бы не плохо ещё, понять как работает cJass...
Я у узнал, что у меня Есть огромная семья: Монитор, системный блок, В сеть воткнул я проводок, Windows - небо голубое... Это всё моё - родное! Без инета жить нельзя - Наркоман наверно я!
Печатать быстрее, чем кликать - Проверено, что быстрее печатать на клавиатуре, чем щелкать мышью. Поэтому JASS быстрее использовать, потому что вы набираете скрипты с клавиатуры, тогда как в GUI Вам нужно мышью кликать на нужных значениях.
Заклинание, не требующее преимуществ jass, быстрее создастся на GUI. Причина одна и очень простая: это GUI. Любой нормальный интерфейс так или иначе ускоряет процесс создания кода. А для непосвященных сделаю еще маленькую заметку: если брать за сравнение высокую скорость набора текста (в jass), то берите высокую скорость установки значений в GUI. Вы наверное не слышали о том, что пользоваться интерфейсом можно абсолютно без указателя мыши. А клавиатура + указатель = высокая скорость. Вы только не подумайте, что я поддерживаю GUI. Так как warcraft ограничивает нас в управлении памятью, занимаемой переменными и прочие фичи, жизненно важно в хороших картах свести код к максимально возможному низкому уровню.
Quote (rep-30011)
на гуи легче определить где ошибка и ненада рыскать в мусоре текста 1 единственную ошибочную букву!!!
По-хорошему, если человек знает, что он делает, и точно представляет, как он это делает, и делает это внимательно, у него ни одной ошибки не выскочит. Но большинство зеленых mapmaker'ов (по себе знаю), ничерта не знают, что они делают, и, тем более, нихрена не представляют, как они это делают, но в надежде на то, что они делают то, что нужно сделать.
Я в контакте и на warcraft3ft.info. Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
rep-30011, ГУИ медленне в работе чем Jass,Во первых при срабатывании триггера варик переводит его в жасс,если ты переведеш свой триггер в жасс ты получиш окло 50 строчек кода,если хорошо знать жасс можно оптимизировать его и будет около 10-15,Во вторых при конвертиции в текст в триггере есть такие плохие функции как BJ, которые содержат в себе еще несколько функций.Например обычное создание 1 юнита ,если перевести в Jass и посмотреть начинку может вызвать шок,но из всего этого нам понадобиться только одна строчка. И еще на гуи нельзя юзать координаты,а используеться отсталые локи которые текут неимвоерно,даже если удалять их всеравно будут лаги,хоть и не большие но будут(Проверено лично,сделал два одинаковых спелла,один с локами другой с ооординатами)
Ничего не знаю. Во-первых, GUI по скорости такие же как и Jass (утечность не в счёт - Jass сам по себе утечен, просто можно его же инструментами эту утечность сократить или даже убрать). Во-вторых - всегда можно заменить строки
Code
set i = i + a set i = i + 5
строкой
Code
set i = i + a + 5
но скорость выполнения будет абсолютно одинакова. В программировании стремятся к созданию небольшого скомпонованного кода для лучшего пониманию кода. Иногда даже сделать из одной строчки десять будет очень важно для повышения производительности, хотя работа в принципе будет аналогичная!
И... WE сам переделывает триггеры в Jass. И тем более - никаких GUI-триггеров в принципе не существует - GUI - это интерфейс! WE не хранит эти триггеры так, как мы их видим, и сразу парсит их в Jass. А 50 строк -> 15 строк это скорее повышение читаемости чем повышение производительности. Тем более у задачи есть минимальная скорость выполнения, стабильно рабочее решение работающее со скоростью ниже этого минимального значения в принципе не возможно создать.
Я у узнал, что у меня Есть огромная семья: Монитор, системный блок, В сеть воткнул я проводок, Windows - небо голубое... Это всё моё - родное! Без инета жить нельзя - Наркоман наверно я!
AnyOne697, я тебе вот что скажу. На кой _)( ты вызываешь лишнюю функцию?
из 30ого сообщения.
AnyOne697, вообще-то ты прав. Если код парсируется, то все BJ заменяются. Но. Есть одно но. В некоторых BJ-функциях производятся ненужные действия, что, как я думаю, не есть гуд по простой логике: зачем делать круг вокруг дома, если работа = 0 ?
Я в контакте и на warcraft3ft.info. Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
По-хорошему, если человек знает, что он делает, и точно представляет, как он это делает, и делает это внимательно, у него ни одной ошибки не выскочит. Но большинство зеленых mapmaker'ов (по себе знаю), ничерта не знают, что они делают, и, тем более, нихрена не представляют, как они это делают, но в надежде на то, что они делают то, что нужно сделать.
Я бы не сказал. Помню три часа сидел с телефоном (тех. под.) и мы доооолго думали, почему не работает инет. Оказалось - билайн пишется как beeline, а не beelain... Простая тупая автоматическая ошибка забравшая у меня ТРИ часа жизни...
Ну и тем более сложно заметить ошибку вроде замены i (ай) на l (эль)... А чисто автоматически отпечататься можно - l и i не очень далеко друг от друга...
Я у узнал, что у меня Есть огромная семья: Монитор, системный блок, В сеть воткнул я проводок, Windows - небо голубое... Это всё моё - родное! Без инета жить нельзя - Наркоман наверно я!
Это смотря, как в машинном коде это все будет выглядеть.
Я в контакте и на warcraft3ft.info. Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
AnyOne697, я перечислил всё, что исключает те случаи, что ты рассказал.
Quote (AnyOne697)
Оказалось - билайн пишется как beeline, а не beelain...
Значит вы не точно знали, что вы делали? Под точностью подразумевается достоверная информация. Достоверная информация: инфа, полученная из нескольких достоверных источников, и совпадающая по значению.
Quote (AnyOne697)
Ну и тем более сложно заметить ошибку вроде замены i (ай) на l (эль)... А чисто автоматически отпечататься можно - l и i не очень далеко друг от друга...
Все нормальные люди пишут код под шрифтом Courier, в котором l, i и I друг от друга удивительно хорошо различимы + в этом шрифте все символы имеют одинаковую ширину, что улучшает читабельность текста.
Я в контакте и на warcraft3ft.info. Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
AnyOne697, вообще-то ты прав. Если код парсируется, то все BJ заменяются. Но. Есть одно но. В некоторых BJ-функциях производятся ненужные действия, что, как я думаю, не есть гуд по простой логике: зачем делать круг вокруг дома, если работа = 0 ?
))) Не... Это всё понятно... Я имел ввиду, что, скорее всего, сначала Jass перейдёт в какое-то надмножество Си, потом как-то по кривому оптимизируется (вот как раз все эти псевдоФункции и функции-пустышки, вроде DoNothing (который нужен, как я понимаю, был только для заполнения полей в if-then-else, например) переделываются в то что нужно. Потом он парситься в сам Си или что-то более похожее (то, на чём был написан WE/WC), а Си уже напрямую в ассемблер - машинный код. Так что все неровности могут превратиться в ровности, а на ровном месте может вырасти Эверест
Я у узнал, что у меня Есть огромная семья: Монитор, системный блок, В сеть воткнул я проводок, Windows - небо голубое... Это всё моё - родное! Без инета жить нельзя - Наркоман наверно я!
ну в Jass'e JassCraft или JNGP мигом ткнут на ошибку
На ошибку-то они ткнут, но если не напишешь set u = null в конце функции, после 100-1000 вызова функции уже начнутся лаги...
Я в контакте и на warcraft3ft.info. Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
Quote (AnyOne697) но скорость выполнения будет абсолютно одинакова.
Это смотря, как в машинном коде это все будет выглядеть.
В том-то и дело, что скорее всего в машинном коде это и будет выглядеть одинаково.
Quote (CHLSN)
Quote (AnyOne697) Оказалось - билайн пишется как beeline, а не beelain...
Значит вы не точно знали, что вы делали? Под точностью подразумевается достоверная информация. Достоверная информация: инфа, полученная из нескольких достоверных источников, и совпадающая по значению.
Ну это как сказать... Я вполне знал что делал, но многие вещи у меня уже доведены до автомата... Такие как печать например...
Quote (CHLSN)
Все нормальные люди пишут код под шрифтом Courier, в котором l, i и I друг от друга удивительно хорошо различимы + в этом шрифте все символы имеют одинаковую ширину, что улучшает читабельность текста.
По форуму не скажешь... И потом, да они различны, но надо вчитываться в каждую букву, а кто это делает?.. На самом деле, слышал, что программисты очень сильно регрессируют в плане чтения - им жизненно необходимо уметь читать по слогам
Я у узнал, что у меня Есть огромная семья: Монитор, системный блок, В сеть воткнул я проводок, Windows - небо голубое... Это всё моё - родное! Без инета жить нельзя - Наркоман наверно я!
))) Не... Это всё понятно... Я имел ввиду, что, скорее всего, сначала Jass перейдёт в какое-то надмножество Си, потом как-то по кривому оптимизируется (вот как раз все эти псевдоФункции и функции-пустышки, вроде DoNothing (который нужен, как я понимаю, был только для заполнения полей в if-then-else, например) переделываются в то что нужно. Потом он парситься в сам Си или что-то более похожее (то, на чём был написан WE/WC), а Си уже напрямую в ассемблер - машинный код. Так что все неровности могут превратиться в ровности, а на ровном месте может вырасти Эверест
Я заметил одну интересную вещь. Даже в Доте такого не наблюдал... Я создаю карту, пишу триггеры, в инициализации карты заполняю глобальные переменные... И с этого момента у меня начинает просто очень долго грузиться карта в определенный момент (я так думаю, когда варик проводит инициализацию всех глобальных переменных, а триггеры - тоже глоабльные переменные)... Как будто он усердно что-то переводит... Вообще, на самом деле, лучший ответ - спросить у разработчиков warcraft. Они-то точно ответят, что к чему, что там как компилируется, и что лучше.
Я в контакте и на warcraft3ft.info. Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?