Q/A

Добавлен , опубликован
`
ОЖИДАНИЕ РЕКЛАМЫ...
21
nvc123, нужно чтобы камера всегда была на юните по осям X,Y и Z. Тоесть чтобы не зависимо от угла атаки юнит находился в центре камеры (камера находинась на юните или на точке с заданным смещением по XY и Z ).

По XY я зафиксировал положение камеры так:
call CameraSetupSetDestPosition(gameCam,oUnitX+camXYoffsetFlying*Cos(GetUnitFacing(udg_cameraController)*bj_DEGTORAD),oUnitY+camXYoffsetFlying*Sin(GetUnitFacing(udg_cameraController)*bj_DEGTORAD),camXYoffsetFlyingTime)
По Z так:
call CameraSetupSetField(gameCam,CAMERA_FIELD_ZOFFSET,GetUnitFlyHeight(udg_cameraController)+camZoffsetWalking,camZoffTimeFlying)
Но результата не последовало. На ровной местности всё ок, но на впадинах или возвышенностях камера ведёт себя странно. Вот карта. Я стёр все свои попытки это пофиксить, поскольку пока они не увенчались успехом.
Загруженные файлы
28
RiseD, а в моей карте что не так?
там он по центру осей почти
причём тут угол атаки я так и не понял
если мой вариант не подходит то юзай дгуи(библиотеки камеры и математики)
на большее чем есть в дгуи варкрафт просто не способен
21
nvc123, я её не не могу запустить. JNGP последний. Вчера установил. Настройки стандартные. В игре смещение чересчур большое. Нужно именно по центру.
28
RiseD, мою не можешь запустить?
ты её не через редактор а через игру открывай и тогда всё норм будет
через редактор из за либы может тупить
38
юнита надо летающим делать
15
Доброго времени суток. Можешь подсказать, почему не запускается(либо не работает) ИИ? Точно не могу определить, что же это именно.
21
Есть ли способ инициализировать триггер в шапке карты без вспомогательных триггеров извне? Тоесть, я хочу чтоб этот триггер регистрировал событие "Инициализация карты", находясь в шапке.
28
GF RaiseD, использовать библиотеки vjass
у библиотек есть initializer func_name
где func_name имя функции которая запустится при запуске карты (функция должна быть внутри библиотеки)
private func_name takes nothing returns nothing
21
Ещё вопрос. Пытался сделать триггерный Cleave и ограничить его действие следующим сектором:
кид
if bj_RADTODEG*Atan2(GetUnitY(attacker)-GetUnitY(enumUnit),GetUnitX(attacker)-GetUnitX(enumUnit)) >= GetUnitFacing(attacker)-65 and bj_RADTODEG*Atan2(GetUnitY(attacker)-GetUnitY(enumUnit),GetUnitX(attacker)-GetUnitX(enumUnit)) <= GetUnitFacing(attacker)+65 then

Я хотел таким образом ограничить клив сектором в 130 градусов. Но это условие никогда не действительно. Я что-то делаю не так.
29
скалярное произведение единичных векторов равняется косинусу угла между ними, атан здесь не нужен
а = вектор от атакующего к цели
б = вектор от атакующего вперёд (cos(facing), sin(facing))
скалярное произведение нормализованных а и б нужно сравнить с половиной "ширины" нужного тебе конуса.
28
GF RaiseD, док мастер объяснять все просто и понятно
но в чём он прав так это в том что можно обойтись без арктангенса
но если не хочешь учить вектора то
от енума отнимай атакера
т.е. вместо
GetUnitY(attacker)-GetUnitY(enumUnit)
пиши
GetUnitY(enumUnit)-GetUnitY(attacker)
29
Просто если я правильно понимаю все это дело происходит в стандартной системе координат т.е., и тут оно будет страдать в случае, если твой "конус" пересекает переход от 360 градусов к 0, в моем же случае этого не произойдет.
Мб я объясняю непонятно, в таком случае загугли скалярное произведение векторов, увидишь что A x B = |A| * |B| * cosAlpha (Alpha - угол между А и B), тогда если длина А = длина B = 1 -> A x B = cosAlpha, что тебе и нужно
github.com/DoctorGester/crumbling-island-arena/blob/master/game/... я реализовывал это здесь (не jass)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.