Функция C3DAnimation::vReset()
Функция vReset() вызывается для установки содержимого объекта анимации в исходное состояние. Она полезна, когда требуется загрузить новую анимацию поверх существующего объекта. Также она используется при уничтожении объекта анимации. Вот ее код:
void C3DAnimation::vReset(void) { int i, j;
// Освобождение объектов for(i = 0; i < m_iNumObjects; i++) { if(m_objObject[i]) { delete m_objObject[i]; m_objObject[i] = NULL; } }
// Освобождение данных ключевых кадров for(i = 0; i < m_iNumObjects; i++) { for(j = 0; j < m_iNumFrames; j++) { if(m_keyFrames[i][j]) { delete m_keyFrames[i][j]; m_keyFrames[i][j] = NULL; } } }
// Установка количества объектов m_iNumObjects = 0; // Установка количества кадров m_iNumFrames = 0; // Установка начального состояния анимации m_iCurFrame = 0; m_lCurTime = 0;
// Инициализация объектов, имен и информации о ключах for(i = 0; i < g_iMaxObjects; i++) { // Объекты m_objObject[i] = NULL; // Имена strcpy(&m_szObjectName[i][0], ""); // Ключи for(j = 0; j < g_iMaxKeys; j++) { m_keyFrames[i][j] = NULL; } } }
В первой части функции я перебираю объекты сцены и удаляю их, если они существуют. Цикл выполняет работу по освобождению всей памяти выделенной для хранения созданных или загруженных трехмерных объектов.
Следующий цикл перебирает все кадры и удаляет их. Здесь освобождается память, выделенная для новых или загруженных кадров.
Затем обнуляется количество объектов, количество кадров, номер текущего кадра и счетчик времени. Этот код должен быть понятен без дополнительных комментариев.
Заключительный цикл очищает строки с именами трехмерных объектов.