doom2d.org

Главная база плоских морпехов
It is currently 21 May 2025, 02:45

All times are UTC + 3 hours




Post new topic Reply to topic  [ 11 posts ] 
Author Message
PostPosted: 09 Nov 2023, 16:39 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 7223
Location: Владивосток
Нужна возможность указывать кадр, с которого будет проигрываться анимация.
Это позволит, например, разнообразить анимацию огня у нескольких факелов, стоящих рядом.

Желательно также иметь при этом возможность начинать её со случайного кадра.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 09 Nov 2023, 18:43 
Offline
Приколист

Joined: 04 Feb 2010, 14:42
Posts: 997
В renders_updated в игровой логике больше нет понятия "номер кадра", "количество кадров" и "длинна анимации (время)", а так же их размеров.
Игровая логика ничего не знает и не должна знать об этих параметрах.
Есть параметр "время начала анимации", который игровая логика может контролировать (синхронизируется по сети).
Что бы синхронизация по сети оставалась правильной надо добавить отдельный параметр - "смещение", время в тиках.

Так как длина анимации игровой логике неизвестна, то рандомизация может быть либо фичей редактора, либо в установленном пользователем пределах (но не вижу смысла делать это в рантайме).


Top
 Profile  
 
PostPosted: 09 Nov 2023, 19:27 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 7223
Location: Владивосток
DeaDDooMER» Игровая логика ничего не знает и не должна знать об этих параметрах.
А с чего вдруг читалка карт стала у нас игровой логикой? Это параметр того же рода, что и нынешние "Прозрачность" и "Смешивание".

DeaDDooMER» Что бы синхронизация по сети оставалась правильной надо добавить отдельный параметр - "смещение", время в тиках.
Это уже оверкилл, мне видится.

DeaDDooMER» рандомизация может быть либо фичей редактора
Для такой "рандомизации" достаточно подбросить кубик. Смысла в ней не больше.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 09 Nov 2023, 22:37 
Offline
Приколист
User avatar

Joined: 17 Oct 2009, 19:57
Posts: 4102
Location: Киров
Я в картах добивался рассинхрона триггерами. То есть вначале карты делаем смену текстуры, а через заданное число тиков снова меняем назад. В итоге панель с этой анимацией начинает отставать от оригинальной на выбранное число тиков. Это конечно костыли, но работает уже сейчас.

_________________
Давай, картечью демонов
Размажем по стене.
Давай, берсерком выпустим
Весь ливер сатане!

Сделайте нормальный огнемёт! :evil:


Top
 Profile  
 
PostPosted: 09 Nov 2023, 22:44 
Offline
Приколист

Joined: 04 Feb 2010, 14:42
Posts: 997
Чёрный Думер wrote:
А с чего вдруг читалка карт стала у нас игровой логикой? Это параметр того же рода, что и нынешние "Прозрачность" и "Смешивание".
А причем тут читалка карт? Старт анимации управляется игровой логикой, а не читалкой карт или рендером. (у нас есть триггер "Смена текстуры")
Кроме того, в отличии от времени, "Номер кадра" не надёжная единица, если смотреть шире.
Остальные параметры записаны в GIF, APNG, WAD-анимации и не могут быть вытащены на сервере(нет рендера через который загружается текстуры) что бы сконвертировать номер кадра в текущее время для синхронизации.
Чёрный Думер wrote:
Это уже оверкилл, мне видится.
Можно забить если не нужно управление анимацией через триггеры/скрипты (смена текстуры будет сбрасывать смещение в ноль).
Чёрный Думер wrote:
Для такой "рандомизации" достаточно подбросить кубик. Смысла в ней не больше.
Задача что бы огонёк не горел синхронно по всему уровню. Кубик прямо в редакторе решает эту проблему. Возможность вручную установить смещение тоже может быть полезна для некоторых эффектов (впрочем сомнительная).

Если хочется, можно обойтись только флажком. Но только для панелей (триггеры нельзя) и только для клиента.


ar888 wrote:
Я в картах добивался рассинхрона триггерами.
В renders_updated?


Top
 Profile  
 
PostPosted: 09 Nov 2023, 23:02 
Offline
Приколист
User avatar

Joined: 17 Oct 2009, 19:57
Posts: 4102
Location: Киров
DeaDDooMER wrote:
В renders_updated?
Нет, я давно его не смотрел. Да и с чего там по-другому должно быть? Мы же Сменой текстуры запускаем анимацию сначала.

_________________
Давай, картечью демонов
Размажем по стене.
Давай, берсерком выпустим
Весь ливер сатане!

Сделайте нормальный огнемёт! :evil:


Top
 Profile  
 
PostPosted: 10 Nov 2023, 01:18 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 7223
Location: Владивосток
DeaDDooMER» Кроме того, в отличии от времени, "Номер кадра" не надёжная единица, если смотреть шире.
Зато она куда более простая, переносимая между WAD / GIF / APNG и, что самое важное, не требующая изменений в карте если вдруг понадобилось изменить скорость анимации.

DeaDDooMER» Остальные параметры записаны в GIF, APNG, WAD-анимации и не могут быть вытащены на сервере(нет рендера через который загружается текстуры) что бы сконвертировать номер кадра в текущее время для синхронизации.
А как сервер тогда вообще кадры считает чтобы их у игроков синхронизировать? Разве нельзя просто текущий счётчик времени нацело поделить на дельту и получить текущий номер кадра рендерера, из которого взятием остатка уже получить номер кадра анимации?

"DeaDDooMER"» Можно забить если не нужно управление анимацией через триггеры/скрипты (смена текстуры будет сбрасывать смещение в ноль).
Оно и не нужно. Это сугубо затем, чтобы не городить дубли анимтекстур если нужно лишь смещение последовательности на кадр-другой.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 10 Nov 2023, 04:45 
Offline
Приколист

Joined: 04 Feb 2010, 14:42
Posts: 997
Чёрный Думер wrote:
Зато она куда более простая, переносимая между WAD / GIF / APNG и, что самое важное, не требующая изменений в карте если вдруг понадобилось изменить скорость анимации.
Они одинаково простые. Но время лучше.
ar888 wrote:
Нет, я давно его не смотрел. Да и с чего там по-другому должно быть? Мы же Сменой текстуры запускаем анимацию сначала.
Не совсем тоже самое. Но может стать лучше при плохой связи.
В мастере когда пришел пакет к клиенту - тогда и смена анимации (и не важно что оно пришло через 10 секунд после нажатия кнопки и лага в сети!).
В рендерах эти 10 секунд автоматически промотаются. При серьёзных проблемах с сетью у всех анимация будет примерно одинаково идти.
При хорошей синхронизации игрового времени (сейчас не очень хорошая) отставания будут меньше тика.
Чёрный Думер wrote:
А как сервер тогда вообще кадры считает чтобы их у игроков синхронизировать? Разве нельзя просто текущий счётчик времени нацело поделить на дельту и получить текущий номер кадра рендерера, из которого взятием остатка уже получить номер кадра анимации?
Никак не считает. Буквально.
Он просто запоминает время когда анимация началась и раздает её клиентам когда надо. И нигде ничего не считает сам.
Дальше клиент(рендер) сам разбирается какой ему кадр нужен и как его рисовать. Выбирает кадр примерно так как ты описал.

Упрощённо для зацикленных анимаций:
frame = (current_time - panel[id].animation_start_time) / animation_fps % total_frames
current_time постоянно синхронизируется с сервером.
panel[id].animation_start_time получается клиентом при входе на сервер или когда используется триггер "Сменить текстуру".
animation_fps и total_frames берутся из файла текстуры, сервер их не знает так как не умеет загружать текстуры.

А еще пакет аж на 1 байт меньше.
Новый (renders_updated) шлёт 4-байтовое абсолютное время.
А старый (master) слал 4-байт номер кадра + 1-байт delay counter (тиков относительно начала кадра N). Подфиксить лаг проблематичнее не имея абсолютного времени.

В общем одни плюсы от использования времени. Нет причин не использовать его.


Top
 Profile  
 
PostPosted: 10 Nov 2023, 08:40 
Offline
Приколист
User avatar

Joined: 17 Oct 2009, 19:57
Posts: 4102
Location: Киров
DeaDDooMER wrote:
При хорошей синхронизации игрового времени (сейчас не очень хорошая) отставания будут меньше тика.
Так я специально этот рассинхрон создаю, чтоб было как ЧД тут мечтает – одни и те же анимации играли по-разному.

На триггерах это получается так:
У нас есть одна анимация. Кадров в ней 4 и они меняются со скоростью 6 тиков.
Мы расставляем на карте панели с этой анимацией и нам не хочется, чтоб все они были одинаковы.
В итоге на часть из них делаем воздействие триггеров с активацией в начале карты. Первый триггер "Смена текстуры" просто сменяет анимацию на пустую, второй триггер "Смена текстуры" делаем с задержкой (расширителем) на выбранное число тиков, и он возвращает анимацию назад. То есть, если мы выставляем задержку 12, то такая анимация у нас будет отставать от основной на 2 кадра. К другим панелям ставим задержку 6 и 18.
Вот и выходит рассинхрон, но с одним файлом анимации.

_________________
Давай, картечью демонов
Размажем по стене.
Давай, берсерком выпустим
Весь ливер сатане!

Сделайте нормальный огнемёт! :evil:


Top
 Profile  
 
PostPosted: 10 Nov 2023, 12:15 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 7223
Location: Владивосток
DeaDDooMER» Они одинаково простые. Но время лучше.
DeaDDooMER» В общем одни плюсы от использования времени. Нет причин не использовать его.

Под капотом, технически - да. Но я говорю с точки зрения картодела. А для него использование времени заведомо неудобно по следующим причинам:

  1. Оно привязывает карту к скорости и количеству кадров конкретной анимтекстуры, усложняя её замену.
    Это проблема буквально из того же разряда, как та, которую я вот на днях исправил.
    Там нельзя было менять анимированные текстуры на статические в ресурснике, не исправляя карту перед этим, иначе редактор попросту вылетал.

  2. Это избыточная точность подстройки, а значит и большая сложность.
    Едва ли кому-то может понадобиться начинать анимацию "с половины времени второго кадра".

  3. Потребуется ещё один особенный диалог в редакторе для задания этой задержки.
    Нечто типа раскадровки с trackbar'ом под ней.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 10 Nov 2023, 17:28 
Offline
Приколист

Joined: 04 Feb 2010, 14:42
Posts: 997
Чёрный Думер wrote:
Оно привязывает карту к скорости и количеству кадров конкретной анимтекстуры, усложняя её замену.
Я считаю что всё наоборот. Это делает отсчет в кадрах. %)
Всякие триггерные конструкции синхронизируют по тикам(времени), а не по кадрам в анимациях.
Это анимация должна подстраиваться под событие, а не события под анимацию.
Идет событие 10 секунд - и анимация должна идти 10 секунд. Дальше триггеры должны переключать анимацию под дальнейшие события. А что там в анимации происходит и сколько там кадров - это дело десятое.
Чёрный Думер wrote:
Это избыточная точность подстройки, а значит и большая сложность.
Редактор знает о анимации всё. Ничего не мешает сделать возможность вводить номера кадров и хранить время внутре. Примерно как показано тут.
То что оно съедет если подменить файл вне редактора - это на совести заменяльщика.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 11 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
doom2d.org, since 2007