Кучу времени убил на это, страдая всякой ерундой, пытался раза 4 поискать в инете хоть какие-нибудь наработки, но видимо плохо ищу
В общем, как сделать снаряд, который игнорил бы впадины, ускорялся/замедлялся в зависимости от дуги и поворачивал бы свой носик на нужный градус (SetUnitLookAt)?
Может у кого есть наработка или ссылка?
upd я пока не в состоянии разобрать вектор и буду очень благодарен, если ответ будет через хэш-таблицу
1.26а

Принятый ответ

Нужен мемхак или рефордж, чтобы поворачивать эффект по всем направлениям Yaw, Pitch, Roll
Всё остальное костыли 2005 года, оставьте их там же
(я про ту самую модель даммики с 360 анимациями для всех поворотов)
И разумеется 100% делать через эффект, никак юнитов

Тоже самое возможно на 126, 127, 128, просто возьмите это
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
5
32
3 года назад
5
Нужен мемхак или рефордж, чтобы поворачивать эффект по всем направлениям Yaw, Pitch, Roll
Всё остальное костыли 2005 года, оставьте их там же
(я про ту самую модель даммики с 360 анимациями для всех поворотов)
И разумеется 100% делать через эффект, никак юнитов

Тоже самое возможно на 126, 127, 128, просто возьмите это
Принятый ответ
0
27
3 года назад
0
Bergi_Bear, понимаю, что сейчас разочарую тебя, но я хочу посмотреть на эти костыли)
Если я вектор не могу понять, то какой там мемхак, а рефа у меня соответственно тоже нет и вряд ли будет
2
32
3 года назад
Отредактирован Берги
2
мемхак, это Контр C + контр V и у тебя гигансткое и функциональное API, тебе не надо понимать вектор. Ибо в функции для повотора можно также передать углы
Тебе нужен Pitch если снаряд эффект выглядит как самолёт в изначальном положении, а там хоть костылями забиваешь как хочешь, но ты можешь его кренить, UnitLookAt - сделан для поворота головы при диалогах в кампании, все его дальнейшие применения - извращение чистой воды, когда есть альтернативы, когда этого не было, то ещё ладно. Но не сейчас, не иди на дорожку инвалида, оставь это для сидящих на айкапе

function GetEffectRoll takes effect e returns real // X | returns Degrees!
        return GetObjectRoll( ConvertHandle( e ) )
	endfunction

	function SetEffectRoll takes effect e, real angle returns nothing
        call SetObjectRoll( ConvertHandle( e ), angle )
	endfunction

	function GetEffectPitch takes effect e returns real // Y | returns Degrees!
		return GetObjectPitch( ConvertHandle( e ) )
	endfunction

	function SetEffectPitch takes effect e, real angle returns nothing // Y | In Degrees!
        call SetObjectPitch( ConvertHandle( e ), angle )
	endfunction

	function GetEffectFacing takes effect e returns real // Z | Yaw | returns Degrees!
        return GetObjectFacing( ConvertHandle( e ) )
	endfunction

	function SetEffectFacing takes effect e, real angle returns nothing // Z | Yaw | In Degrees!
        call SetObjectFacing( ConvertHandle( e ), angle )
	endfunction
Всё есть вертай не хочу

Дальше останется адаптировать готовый луа код и превратить его в jass
				BlzSetSpecialEffectX(missile, x) -- устанавливаем положение эффекта
				BlzSetSpecialEffectY(missile, y) -- устанавливаем положение эффекта
				local zNew  = GetParabolaZ(za, zb, distance * MISSILE_ARC, distance, way) -- считаем новую высоту эффекта
				local zDiff = zNew - z -- считаем разницу высот
				BlzSetSpecialEffectZ(missile, zNew) -- устанавливаем новую высоту эффекта
				local zAngle = zDiff > 0 and math.atan(SPEED_INC / zDiff) - math.pi / 2 or math.atan(-zDiff / SPEED_INC) - math.pi * 2 -- считаем угол наклона снаряда
				BlzSetSpecialEffectOrientation(missile, angle, zAngle, 0) -- устанавливаем направление эффекта
				z = zNew -- запоминаем новую высоту эффекта
BlzSetSpecialEffectOrientation тут нет, но это по аналогии функий мемхака это Facing, Pitch, Roll
Забабахай 2 вместо одной
SetEffectFacing(missile,angle)
SetEffectPitch(missile,zAngle)
Только 1 самый важный момент - Назар вроде как в радианах работал, а функции мемхака берут угол, но это уже проще
Загруженные файлы
0
27
3 года назад
Отредактирован rsfghd
0
Bergi_Bear,
Тоже самое возможно на 126, 127, 128, просто возьмите это
Решил просто перенести свои триггеры сюда, но оно пишет, что я какие-то блоки упустил и не даёт запустить карту
раскрыть
Загруженные файлы
0
32
3 года назад
0
а pjass ты поставил последний?

Попробуй без переноса сохранить чистую карту для начала
0
27
3 года назад
Отредактирован rsfghd
0
Bergi_Bear, сохраняло спокойно, а конкретно мой триггер - нет
Это из-за cjass'a что ли?
Вот даже отключил свои триггеры, снова сохранил и всё норм

upd м, нет, вру, не норм
Карта хоть и сохраняется без ошибок при отключении триггеров, но запустить по прежнему нельзя, в главное меню кидает. Удаление триггеров так же не помогло, хотя я ничего не трогал больше
0
32
3 года назад
0
Сиджас в последнем мемхаке наладили вот /nocjass стоят везде. Ты точно меня хорошо понял про pjass?
2
27
3 года назад
2
0
27
3 года назад
Отредактирован rsfghd
0
Bergi_Bear, отсюда качал pjass xgm.guru/p/wc3/easymem
Ошибка с блоком была из-за отключённого AdicParser'a, но в мемхаке включить его низя, иначе другая ерунда вылезет
МрачныйВорон, пасиб большое, теперь хоть через впадины нормально перелетает)
Однако мне всё равно интересно как замедлить/ускорить снаряд до/от середины полёта и можно ли как-нибудь эту силу прикрутить к параболе?
4
27
3 года назад
Отредактирован MpW
4
На скорую руку составил. Точно не могу сказать, что правильно. Но логически должно быть верным. Хочется на сие творение посмотреть)
Раскладываем скорость на векторы:
Vx=1,Vy=1,Vz=1 - изначально скорость нулевая, тк ракета еще не вылетела. Когда мы запустим, наша скорость будет равна 1. Скорости придает ускорение.
a=0 - ускорение. Изначально оно равно нулю, таймером каждую секунду увеличиваем наше ускорение. Когда снаряд достигнет середины дуги, или половины пройденного пути, тогда уже наше ускорение превращается в понижение. Будет постепенно понижаться до нуля.
Ux,Uy,Uz - тек положение нашего снаряда
каждую секунду тикаем таймером:
изменяем нашу скорость. Вот здесь я не уверен. Надо самому потестить, устал. Но взял из учебников физики. av-physics.narod.ru/mechanics/acceleration.htm простенькая формула.
Vx = Vx + at
Vy = Vy + at
Vz = Vz + at
изменяем наше положение снаряда. черт, забыл углы. ведь координаты, а тут углы. забыл относительно чего углы брать. Углы надеюсь сможешь понять как, а то лень через арккосинус
раскрыть
Ux = Ux + Vx * Sin(theta) * Cos(phi)
Uy = Uy + Vy * Sin(theta) * Sin(phi)
Uz = достаем нужную высоту из параболы (Uz + Vz * Cos(theta) )
//увеличиваем скорость
a = a + 1 - какую вам надо
Загруженные файлы
2
21
3 года назад
Отредактирован scopterectus
2
Сам недавно делал способность с проджектайлом. Можно сделать без векторов и всяких косинусов и синусов. Код на Lua и Reforged, но тут главное арифметика, а не функции:
    -- arrowX/Y/Z - текущее положение снаряда
    -- arrowTargetX/Y/Z - куда должен лететь снаряд
    -- 32.8125 - скорость снаряда (расстояное, которое проходит снаряд за один тик таймера)

    local dx   = arrowTargetX - arrowX
    local dy   = arrowTargetY - arrowY
    local dz   = arrowTargetZ - arrowZ
    local dist = math.sqrt( ( dx ^ 2 ) + ( dy ^ 2 ) + ( dz ^ 2 ) )

    arrowX = arrowX + 32.8125 * ( dx / dist )
    arrowY = arrowY + 32.8125 * ( dy / dist )
    arrowZ = arrowZ + 32.8125 * ( dz / dist )

    BlzSetSpecialEffectX( arrow, arrowX )
    BlzSetSpecialEffectY( arrow, arrowY )
    BlzSetSpecialEffectZ( arrow, arrowZ )
Но тут правда прямолинейное движение.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.