Russian Qt Forum
Апрель 29, 2024, 01:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Анимашки, графы и пытон  (Прочитано 10911 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Апрель 04, 2021, 11:41 »

Добрый день

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

Пусть есть набор различных анимаций (циклов и нет). Можно создавать различные цепочки/последовательности анимаций комбинируя  базовые анимации. При этом должны соблюдаться очевидные ограничения:

- базовая анимцмя  не может быть прервана, только когда достигнут последний кадо, мы можем запустить другую из набора (или ту же самую если loop)

- первый кадр следующей анимации должен быть == последнему кадру предыдущей. Др словами, все плавно, без рывков

Да, да, все ясно, что надо-то?  Улыбающийся А надо дать юзеру возможность (удобно) комбинировать базовые анимации. Простой пример "реакция на событие". Если текущий кадр (global_frame) = 100, то после окончания текущей должна быть выбрана анимация с именем "run" из набора. На первый взгляд, это совсем просто (по крайней мере из кода). Но.. А если "run" несовместима с текущей? Или достижима но через какую-то промежуточную? И.т.п.

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

Частенько, присматриваясь ко всяким графам, я ловил себя на мысли типа "боже, какой головняк с нодом "if". И все потому что не хочет освоить пытон". И вот представилась возможность. Хорошо, вот пытон (уже интегрирован в приложение), есть объект анимацией которого надо управлять. Есть набор/контейнер  базовых именованных анимаций и есть ф-ции событий (global_frame() в примере выше)

И..что? Как (или что) писать на пытоне Непонимающий Как-то я совсем растерялся Улыбающийся Даже без всяких событий нужно как-то задать последовательность анимаций - а как?

Ну вот решил спросить здесь (где многие любят пытон  Улыбающийся)

Спасибо

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Апрель 06, 2021, 10:38 »

Чего молчим? Задача интересная, придумать можно много чего. Собсно нужно разработать Python API. С точки зрения хоста (приложения на С++) все ясно: есть объект, у него есть текущая анимация и текущий кадр этой анимации. Хост знает что с этим делать. На каждом кадре(?) вызывается пытон-скрыпт который решает какая анимация должна быть установлена как следующая.

А вот с пытон-частью хужее. Напрашивается напр так
Код:
// юзер пишет это на пытоне
if (global_frame() == 100)
  object.set_next_anim("run")
else
  object.set_next_anim("idle")
Да, с пытоном знакомился (не более того) неск лет назад, и синтаксис совсем не помню. Ну ладно, дойдет до дела - почитаю. Приведенный псевдокод наверно будет работать, но как-то уж очень тупо, только для 2 анимаций. А если их хотя бы 3, напр idle, walk, run, и соскочить на run можно из walk (но не из idle) ?

Цитировать
А что значит "если"? Вот пусть мне четко скажут что надо, а тогда уж я буду чего-то делать.
Это противоречит идее/гибкости скриптов. Мы не можем (и не должны) знать "что конкретно понадобится", нужно создать общее API с помощью которого можно достичь желаемого. Иначе смысла в скриптах нет, если все-все определено, то проще на плюсах.

Ну и конечно
Цитировать
Взять готоаое, проверенное (желательно ис каропки)
Да с огромным удовольствием, но где ж его взять-то? И есть ли оно в природе? Ну есть напр QStateMachine, конечно прочитал. Вроде вещь неплохая но логику поведения она за меня делать не будет
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Апрель 06, 2021, 15:44 »

ну, вот я прочитал раза 3, нифига (почти) не понял:

- о каких анимациях вообще идёт речь?
- что значит "несовместимые анимации"?
- юзер должен их через гуй собирать или как?
- при чём тут пытон?
- при чём тут события?

и т.д...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Апрель 06, 2021, 17:01 »

ну, вот я прочитал раза 3, нифига (почти) не понял:

- о каких анимациях вообще идёт речь?
- что значит "несовместимые анимации"?
- юзер должен их через гуй собирать или как?
- при чём тут пытон?
- при чём тут события?

и т.д...
Ну блин, включили непонималку Улыбающийся Хорошо, вот более образный пример. Есть человек, для него записана анимация idle (стоит, дысыт, лупает глазками) и анимация walk (идет, записаны шаг левой и шаг правой). Если первый кадр (данные) walk совпадает с последним idle  - то walk может начаться после idle, иначе нет. Юзер натырил таких базовых анимций с веба, теперь их надо как-то склеивать/повторять. Простой пример - до кадра 100 человек стоит (зациклена idle), потом пошел (зациклена walk).  Но это один вариант/сценарий, а может быть сколько угодно (как захочет юзер) и заранее они не известны. Поэтому решить "опциями" не удается. Отсюда скрипты, пытон и.т.п   
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Апрель 12, 2021, 16:08 »

Апну темку, уж очень хороша. Вот еще типовая сцена

100 и более char'ов сидят на стадионе и смотрят матч. Ну для каждого крутится какая-то idle анимация (напр говорит с соседом, поворачивает голову). Число таких анимаций невелико, может всего 3-4. Но они крутятся со сдвигом, однообразие не так уж очевидно. И тут, на каком-то кадре, хирак - ГОЛ! Сhar'ы встают, машут руками (включается анимация "аплодисменты"), потом опять садятся.

Все char'ы и все анимации имеются, нужно только включать нужные в нужный момент. Прикинем еще неск ситуаций. Напр юзер может захотеть чтобы char'ы вскакивали не все сразу, а сначала передние ряды и.т.д. Или аплодируют не все, болельщики др команды наоборот. Очевидно делать это "явно", на плюсах, бесполезно, нужны скрипты. Тогда какое API, что энтузиаст должен писать ?

Но такие задачи нас почему-то не привлекают. Вот кушать QML ложками - то да Улыбающийся А так
Цитировать
Ну откуда я это могу знать?
Плачущий
  
Записан
tux
Крякер
****
Offline Offline

Сообщений: 399



Просмотр профиля
« Ответ #5 : Апрель 12, 2021, 16:30 »

А зачем пайтон в форуме за кьют? Шоп, типа, "по модному"? Улыбающийся
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Апрель 13, 2021, 10:44 »

А зачем пайтон в форуме за кьют? Шоп, типа, "по модному"? Улыбающийся
Вверху по меньшей мере дважды сказано почему написать все на плюсах не удается. Пытон выбран просто потому что он уже интегрирован. И дело собсно не в нем - нужно придумать "свой язык" для решения разнообразных задач комбинирования анимаций. Ну или скромнее/реалистичнее "свoе API"
Записан
tux
Крякер
****
Offline Offline

Сообщений: 399



Просмотр профиля
« Ответ #7 : Апрель 15, 2021, 23:45 »

Вверху по меньшей мере дважды сказано почему написать все на плюсах не удается.
Возможно, что именно у вас и не получается. Или я просто не понимаю, в чём именно проблема то? Если вам так уж нужны именно скрипты, то в Ot JS есть...
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Апрель 16, 2021, 09:55 »

Или я просто не понимаю, в чём именно проблема то?
Проблема в том "а что (или как) писать на скриптах ?"
Записан
tux
Крякер
****
Offline Offline

Сообщений: 399



Просмотр профиля
« Ответ #9 : Апрель 16, 2021, 10:26 »

Проблема в том "а что (или как) писать на скриптах ?"
Так вы определитесь, что в вашем понимании сама "анимация". Можкт у вас это всего лишь 100500 статичных картинок. Улыбающийся
Т.е. "плясать" надо от самой задачи. А вы пытаетесь начать от ЯП.
Хотя, если шибко хочется поиграться, то можно попробовать всё писать на пайтоне, а оболочку на том же PyQt.
« Последнее редактирование: Апрель 16, 2021, 10:27 от tux » Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Апрель 16, 2021, 10:53 »

Так вы определитесь, что в вашем понимании сама "анимация". Можкт у вас это всего лишь 100500 статичных картинок. Улыбающийся
Почему нет? Анимацией может быть многое, набор спрайтов тоже. Напр первые 100 картинок = "Animation 1", вторые 60 = "Animation 2" и.т.д. В любом случае анимация имеет диапазон кадров/времени и данные для каждого. Эти данные могут "проигрываться" приложением. Но это всего лишь одна анимация. А нужно создать средства для автоматычного проигрывания 2 и более анимаций, как бы "небольшой фильм"  Улыбающийся

Что тут может быть неясно, и откуда такая "стена непонимания" - хз
Записан
tux
Крякер
****
Offline Offline

Сообщений: 399



Просмотр профиля
« Ответ #11 : Апрель 16, 2021, 11:24 »

Что тут может быть неясно, и откуда такая "стена непонимания" - хз
"Дьявол скрывается в деталях". Оно, ведь только абстрактно "всё просто и понятно".
Я ни на что не претендую, но попробуйте написать ТЗ на такую задачу. Хотя бы для себя. Только полное. Т.е. на чём все это должно запускаться, в каких условиях и т.д.
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Апрель 16, 2021, 12:33 »

"Дьявол скрывается в деталях". Оно, ведь только абстрактно "всё просто и понятно".
Я ни на что не претендую, но попробуйте написать ТЗ на такую задачу. Хотя бы для себя. Только полное. Т.е. на чём все это должно запускаться, в каких условиях и т.д.
Запустите игру где бегают какие-нить орки, эльфы и.т.п. И вот Вы начинаете интересоваться типа "а как char передвигает ногу ?", "а как из этого получается изображение и на каком видео оно сможет отрендериться?". Ну или как сказал старший товарищ  "О какой вообще анимации идет речь?" (с понтом крутой аниматор Улыбающийся).

Конечно это не секрет, но в данной теме/задаче это и нафиг не нужно. Нужно разработать скриптовое API для создания простеньких фильмов/сценариев комбинируя имеющиеся базовые анимации. Все остальное - праздное любопытство  Улыбающийся
Записан
tux
Крякер
****
Offline Offline

Сообщений: 399



Просмотр профиля
« Ответ #13 : Апрель 16, 2021, 13:43 »

Нужно разработать скриптовое API для создания простеньких фильмов/сценариев комбинируя имеющиеся базовые анимации.
Ну так и начните разрабатывать. Сомневаюсь, что найдётся лох, кто подобное будет делать нахаляву.
Хотя: лох - не мамонт, не вымрет! Веселый
Если подобное заказывать - ТЗ всё равно будет нужно.
Записан

kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #14 : Апрель 16, 2021, 13:58 »

1) написать аналогичный тестовый код на С++
2) определить его ключевые элементы: какие классы и объекты используются
3) создать к ним питоновские привязки (по-моему один из вариантов — SWIG)
4) переписать 1) на питоне для верификации

не знаю, может поможет подобное из другого проекта (понятия не имею как оно работает):
- https://github.com/xbmc/xbmc/tree/master/xbmc/interfaces/swig
- https://github.com/xbmc/xbmc/tree/master/xbmc/interfaces/python
- https://github.com/xbmc/xbmc/tree/master/tools/codegenerator
« Последнее редактирование: Апрель 16, 2021, 14:00 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.075 секунд. Запросов: 22.