2016-09-20 11 views
0

Мне было интересно, есть ли какие-либо инструменты для моделирования физического движения для анимации в Qt. Я помню, как однажды увидел на iOS, что можно было перетащить панель вниз быстрее, и панель будет отскакивать в нижней части экрана с интенсивностью пропорционально силе, которую она тащила; Я считаю, что это называется UIKit Dynamics. Что-то вроде этого:Qt/C++ физический движок похож на iOS UIKit Dynamics

enter image description here

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

enter image description here

Здесь прогресс круга истекшего значения слегка подпрыгивая после достижения его новое значение. Эти эффекты не могут быть выполнены только с помощью смягчающих кривых, предлагаемых Qt.

Кто-нибудь знает, есть ли способы создания этих типов анимаций с помощью Qt Widgets или Qt Quick? Есть ли что-то, что можно было бы интегрировать с Qt Animations?

+0

Я немного задумываюсь над этим, но склоняюсь к тесному голосованию (спрашиваю учебник/библиотеку). http://softwarerecs.stackexchange.com/ может быть лучше подходит для этого вопроса. – user4581301

+0

@ user4581301 Не знал об этом сайте StackExchange. Я переведу вопрос. –

ответ

2

У каждой анимации есть это, и это не «физический движок», он называется «ослабление кривых». Они обычно используются для подражания физическому взаимодействию и оживления, в противном случае скучной и безжизненной анимации. Естественно, Qt has them too, существует широкий спектр наиболее часто используемых, и вы можете сделать свой собственный тоже.

Эти эффекты не могут быть выполнены только с ослаблением кривых Qt анимации предложение.

Не похоже, что вы даже попробовали. Все приведенные выше примеры эффектов могут быть достигнуты с использованием кривых ослабления. Например, кривая замедления для второго эффекта должен быть что-то вроде этого:

enter image description here

не Ramping до почти линейно, пока перехлестом, держа на мгновение, после чего ослабления обратно к цели.

Кроме того, если вы планируете создавать фантастические анимированные пользовательские интерфейсы, я бы предложил вместо этого использовать QML и держаться подальше от стека QtWidget - QML значительно быстрее и проще выполнять современный интерфейс. Виджеты не подходят для этого, вы могли бы это сделать, но это будет утомительный процесс.

+0

Я пробовал, но не знал, что вы также можете создавать собственные кривые ослабления. Благодаря! –

+1

@JacobKrieg - эта часть «интенсивность пропорционально с силой, которую она тащила», вам нужно будет сделать дополнительное кодирование. И это не было бы силой, поскольку вход устройства редко имеет представление о его силе, но его скорость. Вам нужно будет следить за скоростью, если вы хотите пропорциональной реакции. – dtech