При добавлении новых ключей список
При добавлении новых ключей список просматривается с конца, поскольку обычно это ускоряет поиск нужной позиции.
После того как список построен, остается воспроизвести его. Для этого мы в цикле устанавливаем время анимации, что приводит к перемещению объекта в соответствии с текущим временем в анимационной последовательности. Ниже приведен фрагмент цикла пассивной работы приложения:
/b> Глава 11. Клипы
BOOL CMainFrame::Update() {
if (m bPlayAnimation) {
double 1 = m_Anim.GetLength();
double t = in_Anim.GetCurTime() ;
t += 0.1;
if (t » 1) (
if (m_bLoopAnim) {
m_Anim.SetTime(0.0) ;
} else {
m_bPlayAnimation = FALSE;
Status("End of animation");
} } else (
m Anim.SetTime (t);
}
i
Счетчик времени увеличивается с интервалом в 0,1 единицы. В конце анимация останавливается или запускается снова, в зависимости от состояния флага m_bLoopAnim. Ниже приведена функция C3dAnimationTime::SetTime, задающая состояние объекта для нужного момента времени:
BOOL C3dAnimation::SetTime(double time) (
m_dCurTime = time;
if (!m_pFrame) return FALSE;
if (IsEmptyO) return FALSE;
// Перебрать элементы списка в поисках пары ключей, // между которыми лежит заданная величина // (или точного совпадения) POSITION pos = GetHeadPositionO;
ASSERT(pos) ;
C3dAnimKey* pBefore = (C3dAnimKey*) GetNext(pos) ;
ASSERT(pBefore) ;
if (pBefore-»m_dTime » time) return FALSE;
// Слишком рано, // ключ отсутствует
C3dAnimKey* pAfter = NULL;
while (pos) {
pAfter = (C3dAnimKey*) GetNext(pos) ;
ASSERT(pAfter) ;
if ( (pBefore-»m_dTime «= time) && (pAfter-»m_dTime »= time) ) break;
pBefore = pAfter;
// Вычислить интерполированные значения C3dVector p, d, u;
double dt;
if (pAfter != NULL) {
dt = pAfter-»m dTime — pBefore-»m_dTime;
} else {
dt = pBefore-»m_dTime;
} if ((pAfter == NULL) ¦¦ (dt ==0)) {
p = pBefore-»m_vPos;
d = pBefore-»m_vDir;
u = pBefore-»m_vUp;
} else {
double r = (time — pBefore-»m_dTime) / dt;
p = pBefore-»m_vPos + (pAfter-»m_vPos — pBefore-
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий