Добавлен Makeba,
опубликован
Ладно, я тут кликбейтнул слегка, извините. Сразу скажу, что сомневаюсь, что эта информация может быть кому-то полезна, возможно, это всё уже давно найдено и описано, но мне такая инфа на глаза не попадалась (хотя, если честно, я и не искал). Вдруг, это пригодится юным мечтателям, желающим конвертировать экранные координаты в мировые))0
Точно могу сказать, что тема не новая: с этими багами я столкнулся год назад, но забил. Короче, пусть будет, надо же что-то в блоге писать, пока его не отобрали.
Баги связаны с выводом 3д модели на экран через фрейм типа SPRITE.
Точно могу сказать, что тема не новая: с этими багами я столкнулся год назад, но забил. Короче, пусть будет, надо же что-то в блоге писать, пока его не отобрали.
Баги связаны с выводом 3д модели на экран через фрейм типа SPRITE.
Вкратце:
- Если в модели есть событийные звуки, то они заспавнятся в центре карты. Игроку они слышны только если территория разведана.
- Если в модели есть PopcornFX эффекты, то они не отображаются на фрейме, но спавнятся в центре карты. Это видно при неуменьшении масштаба, установки его в пределах 0.1 — 1. Чтобы хорошо разглядеть можно использовать модели без меша или включать внутримодельную камеру без уменьшения масштаба спрайта. И что интересно: если навестись курсором в место спавна эффекта, то можно обнаружить, что кнопки мыши на этой точке не работают. Клики насквозь не проходят, даже колёсико не крутится.
ЗВУКИ
Прикладываю видос с двумя примерами. Громкость поднял в видеоредакторе, так что берегите ушки.
Код с объяснениями:
--Здесь я запускаю дефолтный эффект NagaDeath, с событийным звуком бульканья в анимации Birth. Создаю в таймере,
--так как анимация нонлупинговая.
--При подведении игровой камеры к центру карты слышим всплеск
TimerStart(CreateTimer(), 1.5, true, function()
nagaspawn = BlzCreateFrameByType("SPRITE", "SpriteName", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
BlzFrameSetAbsPoint(nagaspawn, FRAMEPOINT_CENTER, 0.2, 0.3)
BlzFrameSetSize(nagaspawn, 0.01, 0.01)
BlzFrameSetModel(nagaspawn, "Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath", 1)
BlzFrameSetScale(nagaspawn, 0.001)
BlzFrameSetVisible(nagaspawn, true)
BlzFrameSetSpriteAnimate(nagaspawn, 0, 0)
print("spawn")
end)
--А вот здесь проверяю кодоя. Для наглядности я оставил у него только анимации, где он барабанит,
--и переимпортировал в карту, поэтому путь нестандартный
--Ситуация со звуком такая же, как и с нагой
kodo = BlzCreateFrameByType("SPRITE", "SpriteName", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
BlzFrameSetAbsPoint(kodo, FRAMEPOINT_CENTER, 0.2, 0.3)
BlzFrameSetSize(kodo, 0.01, 0.01)
BlzFrameSetModel(kodo, "kotobeast_oneanim.mdx", 1)
BlzFrameSetScale(kodo, 0.00088)
BlzFrameSetVisible(kodo, true)
BlzFrameSetSpriteAnimate(kodo, 2, 1)
--
Видео:
POPCORNFX ЭФФЕКТЫ
Код с объяснениями:
--Продолжаем мучать эффект наги, но в этот раз не уменьшаем масштаб. Видео получилось очень наглядное:
--эффект НЕ НА ЭКРАНЕ в заданных координатах, а В ЦЕНТРЕ КАРТЫ
--
TimerStart(CreateTimer(), 1.5, true, function()
nagaspawn = BlzCreateFrameByType("SPRITE", "SpriteName", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
BlzFrameSetAbsPoint(nagaspawn, FRAMEPOINT_CENTER, 0.2, 0.3)
BlzFrameSetSize(nagaspawn, 0.01, 0.01)
BlzFrameSetModel(nagaspawn, "Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath", 1)
--BlzFrameSetScale(nagaspawn, 0.001)
BlzFrameSetVisible(nagaspawn, true)
BlzFrameSetSpriteAnimate(nagaspawn, 0, 0)
print("spawn")
DestroyFrame(nagaspawn)
end)
--
--Используем модель стандартного вирма, но не уменьшая масштаб. В аргументе id камеры указан 0 (то есть нулевая камера из модели), но это
--не обязательное условие, я сделал это именно для наглядности, так как при стандартной камере мы просто ничего не увидим за огромной тушкой.
--В центре карты появился эффект ледяного дыхания, хотя на самом спрайте он не отображается
--
Frame01 = BlzCreateFrameByType("SPRITE", "Frame01", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
BlzFrameSetAbsPoint(Frame01, FRAMEPOINT_TOPLEFT, 0.35, 0.4)
BlzFrameSetAbsPoint(Frame01, FRAMEPOINT_BOTTOMRIGHT, 0.6, 0.15)
BlzFrameSetModel(Frame01, "units\\undead\\FrostWyrm\\FrostWyrm", 0)
--
--Вот ещё такой вариантец. Подправил портрет вирма (снёс задний фон), переимпортировал и использовал модельную камеру
с оригинальным масштабом. Попкорны всё там же. Результат на скриншоте
--
Frame01 = BlzCreateFrameByType("SPRITE", "Frame01", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
BlzFrameSetAbsPoint(Frame01, FRAMEPOINT_TOPLEFT, 0.35, 0.4)
BlzFrameSetAbsPoint(Frame01, FRAMEPOINT_BOTTOMRIGHT, 0.6, 0.15)
BlzFrameSetModel(Frame01, "wyrm_portrait", 0)
--
Видео:
Нотариально заверенный скриншот:
P.S.
Если это лютый баян, и всем известно, то почему вы мне не рассказали? извините за кринж и слоупочество.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Берги
Я от них отказался в своё время по причине "не возможности воспроизведения конкретных анимаций", возможно либо не умел либо на тот момент функция BlzFrameSetSpriteAnimate не работала.
Да это критично, да баг есть, возможно сами разрабы не проверяли даже, но как говорится, всегда есть альтернативы для анимации фреймов, например последовательная смена бекдропа, либо же самодельные спрайты по тому же принципу. Либо ручками удалить звук из моделей и загрузить модели обратно без звука и воспроизводить звук самостоятельно
Отредактирован Makeba
BlzFrameSetSpriteAnimate работает, но там принцип работы идиотский. Есть 5 индексов от 0 до 4, при использовании которых из модели подтянутся анимации с именами birth, death, stand, morph, morph alternate соответственно.
О наконец-то ты карты анимировал