Скопировать графические данные нужной фазы
BOOL C3dSprite::SetPhase(int iPhase) f
return m_Tex.SetPhase(iPhase);
Работа этой функции сводится к вызову C3dlmage::SetPhase:
/b> Я? Глава 9. Спрайты
BOOL C3dlmage::SetPhase(int iPhase)
{
if ((iPhase « 0) ¦I (iPhase »= m_iPhases)) f return FALSE;
} m iCurPhase = iPhase;
// Скопировать графические данные нужной фазы в рабочую
область
int iBytes = m_rlimg.bytes_per_line * m_rlimg.height;
memcpy(m rlimg.bufferi,
(BYTE*)m_rlimg.bufferl + (m_iCurPhase + 1) *
iBytes,
iBytes) ;
// Известить производные классы об изменениях _OnImageChanged() ;
return TRUE;
}
Приведенный выше фрагмент реализует операцию копирования, изображенную на Рисунок 9-7. Мы вычисляем адрес нужного кадра, затем функцией memcpy копируем данные кадра в рабочую область. После завершения копирования вызывается функция _OnlmageChanged. Эта виртуальная функция класса C3dlmage не делает ничего, однако она может быть переопределена в производных классах (таких, как C3dTexture), которым необходимо сообщать о внесении изменении в изображение. Класс C3dTexture с помощью этой функции, расположенной в файле 3dlmage.cpp, уведомляет механизм визуализации об изменении графических данных текстуры:
// виртуальная функция
void C3dTexture::_OnImageChanged()
{
if (!m pITexture) return; // Возможно, текстура еще не
создана
// Новое изображение — известить механизм визуализации // об изменении графических данных (но не палитры!) m hr = m pITexture-»Changed(TRUE, FALSE);
ASSERT(SUCCEEDED(m_hr)) ;
}
При этом крайне важно уведомить механизм визуализации об изменении графических данных, поскольку они могут кэшироваться; простое обновление графических данных еще не гарантирует изменения макета на экране.
Создание растровых изображений ''IfHj
229Приложение Sprites
Когда я пишу приложение-пример, то стараюсь избегать всего, что не является абсолютно необходимым для раскрытия темы. Стоило мне наладить работу класса C3dSprite в приложении Sprites, как тут же немедленно захотелось добавить в него массу новых возможностей. Тем не менее я устоял перед искушением, и результат моих усилий можно в первом приближении назвать игрой.
Содержание Назад Вперед