Тема: Xors3D
Показать сообщение отдельно
Старый 25.08.2016, 17:37   #716
Detmer
AnyKey`щик
 
Регистрация: 22.08.2016
Сообщений: 5
Написано одно полезное сообщение
(для 2 участников)
Ответ: Xors3D

Решил проблему. Для будущих поколений, так сказать, опишу суть. Хотя, может, это я один такой дурак? Тогда не серчайте.

А суть в разных способах реализации транзишна у блитца и ксорса. Алсо, обнаружил, что и название параметра у них разное. В Блитце это именно "transition", а в ксорсе "translation", хотя справка в итоге всё равно говорит, что это значение "of transition".

Итак, в качестве условия для вызова анимации у меня стояла команда xKeyDown. Соответственно, если кнопка была нажата, анимация вызывалась сотни раз в секунду. Но в блице это не мешало всему работать корректно.

В блитце всё работало без проблем по той причине, что там транзишн действует по принципу:
1. Играется какая-то анимация.
2. Вызывается функция Animate.
3. С текущего кадра происходит транзишн к первому кадру вызваной анимации.
Чем больше транзишн, тем плавнее и медленее переход.

В ксорсе отличие в том, что на пункте 3 транзишн не к первому кадру идет, а как бы отскакивает назад от текущего положения. Если транзишн = 1, тогда да, к первому кадру. Если скажем 10, то может на середину отпрыгнуть и уже с середины проигрывать до конца.

Грубый пример:
Есть моделька с анимацией в 15 кадров. Проигрывается с 1 по 15 соответственно. Тип анимации допустим стоит 3. То есть один раз проигрывается и застывает на последнем кадре. Если ставим транзишн 1, то она будет резко отскакивать почти к началу и снова проигрываться при повторном вызове функции Animate. Если поставим 7, то примерно на середину плавно отойдёт (в нашем примере на 7-8 кадры) и с этого места начнет к последнему кадру вызваной анимации проигрываться.

Зависимость не такая прямая, конечно, что транзишн=7, это 7-8 кадры, но в целом верная. Чем больше транзишн, тем он плавнее, и тем меньше "отскок" в кадрах. Чем меньше транзишн, тем он порывистее, но и "отскок" ближе к первым кадрам анимации.

Еще важный момент заключается в том, что если до окончания "откатывания" (читай транзишна) еще раз вызвать Animate, то он уже не плавно "откатывается", а дергается назад! Что несколько опечалило. В блитце оно всё-таки поровнее всё как-то, без дёрганий.

Именно поэтому в блице всё было окей, а в ксорсе из-за частого срабатывания xKeyDown а следовательно и Animate, происходила резкая серия таких "отскоков" и выглядело, будто никакого транзишна и нет вовсе!

Так же прилагаю гифки для наглядности.

1. Ксорс, транзишн равен 10. Моделька птички, 15 кадров, проигрывается один раз и застывает. Три раза вызываю анимацию еще раз. Потом еще три раза но уже два раза нажимаю кнопку анимации, из-за чего возникают скачки.


2. Ксорс, транзишн равен 2. Тоже самое, три раза жмакаю просто, потом трижды двойное нажатие. Здесь отскоки почти не видны, потому что транзишн невелик. Чем больше транзишн, тем более заметны отскоки, то есть их легче словить. При транзишне=2 нужно очень быстро жмакать клавишу анимации, чтобы получился отскок. При транзишн=10 достаточно пару раз в секунду. Но, конечно, можно ручками реализовать способ, чтобы отскоков не было вообще. Возможно потом накатаю, выложу в тред.


3. Блиц, транзишн равен 10, три простых нажатия, затем три двойных, но как видим, скачков не возникает! Анимация просто как бы застопоривается на первых кадрах. Тоже самое. если зажать кнопку анимации.


4. Блиц, транзишн 2.


А! И да, наверное я мог просто написать, что надо использовать xKeyHit вместо xKeyDown

Всем peace!


UPD: гифки внутри!

Последний раз редактировалось Detmer, 25.08.2016 в 23:00.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Detmer за это полезное сообщение:
impersonalis (25.08.2016), St_AnGer (25.08.2016)