do {
// Какие-то действия...
} whilenot (i++ >= pow)
Будет транслировано в
loop
// Какие-то действия
exitwhen i >= pow
set i = i + 1
endloop
whilenot это псевдоним exitwhen. Натыкаясь на whilenot, парсер заменяет его на exitwhen Лучше whilenot не использовать, он только путает и С-стилистики не прибавляет, из-за отсутствие такового в самом С.
Разница в инкременте
do {
// Какие-то действия...
} whilenot (i++ >= pow)
Сначала будет произведена проверка, затем увеличение переменной i на 1
do {
// Какие-то действия...
} whilenot (++i >= pow)
Сначала переменная i будет увеличена на 1, затем будет произведена проверка.
Вдохновляйтесь примером сжасса. Написан на асме крутым программером. Работает нереально быстро. После этого: саппортить этот код никто не может, включая автора. Месяцы на отладку багов. Баги до сих пор есть и совершенно непредсказуемые.
Который используется даже в китайском YDWE дополненный кучей cJass библиотек. Вот это успех.
allocate выделяет индекс структуры и возвращает его.
Если парсер наткнется на вызов метода create, он проверит наличие в этой структуре метода create, если такого нет, будет вызван метод allocate вместо create.
Я бы всё-таки предложил взять любую доступную стать по ооп для новичков по любому современному статически типизированному языку и просто слизать её переделав под вжасс
А зачем? Любая статья по ООП, это в основном вода про "нас окружают объекты, у них есть свойства, бла-бла-бла". Любой игрок вара уже знает что такое объект, на примере того же юнита, который имеет набор свойств, где полями можно назвать параметры (броня/здоровье/мана/скорость), а методами - его поведение (если юнит движется, значит в каждый кадр вызывается метод, высчитывающий из скорости и прошедшего времени его новое положение) и т.д. Нужно только усвоить базовый принцип воплощения объектов в коде, который един для всех языков и vJass-a в частности.
Теперь вопрос, использование таких переходов и присваивание другим локальным более производительнее чем использование глобалок во всем триггере или нет?
Озвучу 3-е мнение и скажу, что этот вопрос тебя волновать не должен. И DracoL1ch, и ssbbssc оба правы, но это не окажет на игровой процесс и оптимизацию в карте никакого влияния. Механика слишком низкоуровневая.
Проблемок никаких не будет, если запускать уже запущенный таймер?
Проверка не нужна. Проблемок не будет.
Автору спасибо за взятие кода в теги и человеческое оформление.
Впрочем, если вы используете cjass, можно просто писать
Опускать this можно и в vJass. Из оригинала:
this is optional : You can use a single . instead of this. when you are inside an instance method. (For example set .member = value)
Однако можно сделать вот как, обходя стандартный метод создания, при этом, значения вам нужно будет задать самим
Внутри структуры можно перегрузить конструктор create. Если структура не имеет определенный программистом метод create, парсер установит вызов метода allocate для выделения ячейки под структуру. Если метод create программистом определен, он сам должен вызвать метод allocate внутри конструктора
struct Point
real x
real y
static method create takes nothing returns thistype
local Point p = Point.allocate()
set p.x = 0.0
set p.y = 0.0
return p
endmethod
endstruct
Метод create должен быть статичным.
Важно: вы можете объявлять массивы внутри структур.
И ни слова о том, как это делается
И еще много чего важного, чего хватит на 2 такие статьи (исключая множество фич которые мало кому вперлись).
Худо-бедно короче говоря. Многое сказано вскользь и с успехом опущены важные детали.
Мне нужно узнать какая характеристика у героя является основной.
Такой функции нет. Используй обходные пути
База данных
Дать в РО каждому герою способность-пустышку в соответствии с его основной характеристикой и проверять наличие конкретной способности
В зависимости от того, из какой таверны взят герой (или как они у тебя выбираются) добавлять их в отряды силачей/ловкачей/умничей
Вновь не то ты понял. Я знаю что делают обе эти функции, мне нужно знать как лучше выходить из функции, используя return в ее конце, или нет.
Вновь не то ты знаешь. Эти ключевые слова не являются функциями. Разберись в основах языка.
НЕТУ никакого ЛУЧШЕГО способа выйти из функции, сам по себе вопрос - бред.
В общем в способности урон подсчитывается от основной характеристики героя(ОХГ), но для этого придется создавать еще одну массивную целочисленную для сохранения ОХГ, поэтому подумал, что может я упустил такую функцию, в которую указываешь юнита, а она возвращает ОХГ этого юнита, есть ли такая штука?
Непонятно что тебе нужно. Само значение характеристики или просто узнать, какая из характеристик является основной.
Также появился еще один вопрос, как лучше завершать работу большинства функций, через endfunction или через return???
endfunction не завершает работу функции. Это ключевое слово указывает компилятору на конец блока кода текущей функции.
Работу функции завершает команда return. Используется для принудительного выхода из функции и возврата значения если необходимо.
И еще один вопрос, в cJass видел такую штуку как private, есть ли альтернатива этому на Jass?
private/public пришли из vJass. Альтернатив в классическом нету.
стандартные юинты/заклинания/декорации и всё-всё-всё хранится не в карте, а в архивах игры, в так называемых SLK-таблицах
игра/редактор, во время загрузки карты, получает данные из этих SLK-таблиц
внутри самой карты хранятся данные об изменении уже существующих данных SLK таблицы, то есть, из SLK-таблицы берутся данные юнита, а из карты информация о том, какие данные этого юнита изменены, таким образом в памяти игры/редактора появляется новый юнит
чтобы редактор мог работать, ему придется загружать стандартные данные из SLK-таблиц
Уничтожая эффект, ты заставляешь его проигрывать анимацию Death. Если у эффекта только 1 анимация, будет проиграна эта единственная анимация. Если анимаций несколько, но нет анимации Death, эффект просто исчезнет.
Если движок делает 200 вычислений когда я делаю 10, то 50 моих + 50 от движка выглядят симпотичнее.
Работа движка производится на машинном языке. Код же на Jass интерпретируется виртуальной машиной со множеством проверок. 10 твоих вычислений, в действительности, могут интерпретироваться в более 200 машинных команд движка.
Функция пользовательская - производительность ниже
Для изменения высоты юнита с указанием скорости в SetUnitFlyHeight, ты используешь только эту функцию.
Рассчитывая высоту самостоятельно, ты используешь и функцию SetUnitFlyHeight, и пользовательский код Jass для расчетов.
Очевидно, во втором случае операций больше.
Нужно ли это? Вероятно как и сам вц3 - нет. Но перфекционизм можно считать моим вторым хобби.
С практической точки зрения вопрос оптимизации не актуален. В наши дни следует думать о качестве кода и простоте его поддержки.
» WarCraft 3 / Fel fever
» WarCraft 3 / 5. Функции в jass
Ред. GetLocalPlayer
» WarCraft 3 / 5. Функции в jass
» WarCraft 3 / 5. Функции в jass
» StarCraft / StarCraft Remastered
» StarCraft / StarCraft Remastered
» WarCraft 3 / Делаю рандом на пик героев но почемуто герои повторяюся.
Главное меню - Файл - Параметры - Проверка карты - "Фиксированный случайный разброс"
Если есть, убери.
» WarCraft 3 / Не берет москитных юнитов в группу
» WarCraft 3 / Циклы в cJass
» WarCraft 3 / Вопрос о функциях
» WarCraft 3 / vJass: .create () и .allocate () в чем разница?
Если парсер наткнется на вызов метода create, он проверит наличие в этой структуре метода create, если такого нет, будет вызван метод allocate вместо create.
» WarCraft 3 / [vJass] Основы работы со Структурами (Structs)
Ред. GetLocalPlayer
» WarCraft 3 / Вопрос о функциях
Ред. GetLocalPlayer
» WarCraft 3 / [vJass] Основы работы со Структурами (Structs)
Худо-бедно короче говоря. Многое сказано вскользь и с успехом опущены важные детали.
» WarCraft 3 / Вопросы по функциям
НЕТУ никакого ЛУЧШЕГО способа выйти из функции, сам по себе вопрос - бред.
» WarCraft 3 / Где можно прочитать про структуры "для чайников"?
Ред. GetLocalPlayer
» WarCraft 3 / Вопросы по функциям
Работу функции завершает команда return. Используется для принудительного выхода из функции и возврата значения если необходимо.
Ред. GetLocalPlayer
» WarCraft 3 / Где можно прочитать про структуры "для чайников"?
» WarCraft 3 / способ оглушить
Ред. GetLocalPlayer
» WarCraft 3 / хранить функцию в макросе cjass define?
Ред. GetLocalPlayer
» WarCraft 3 / как можно убрать стандартных юнитов с редактора?
» WarCraft 3 / Обнуление спецэффектов
Ред. GetLocalPlayer
» WarCraft 3 / Использование SetUnitFlyHeight
» WarCraft 3 / Использование SetUnitFlyHeight
Рассчитывая высоту самостоятельно, ты используешь и функцию SetUnitFlyHeight, и пользовательский код Jass для расчетов.
Очевидно, во втором случае операций больше. С практической точки зрения вопрос оптимизации не актуален. В наши дни следует думать о качестве кода и простоте его поддержки.