Я запускаю анимацию в приложении WinForms со скоростью 18,66666 ... кадров в секунду (она синхронизируется с музыкой со скоростью 140 ударов в минуту, поэтому частота кадров странная). Каждый элемент анимации предварительно рассчитывается, и анимация управляется мультимедийным таймером высокого разрешения. Сама анимация плавная, но я вижу значительное количество «разрывов» или артефактов, возникающих в результате того, что клетки попадаются на полпути при обновлении экрана.
Когда я беру набор ячеек, отрисованный моей программой, и записываю их в файл AVI, а затем воспроизводю файл AVI в проигрывателе Windows Media, я вообще не вижу разрывов. Я предполагаю, что WMP воспроизводит файл гладко, потому что он использует DirectX (или что-то еще) и может синхронизировать рендеринг с обновлением экрана. Это не меняет частоту кадров, так как анимация синхронизируется со звуком.
Вот почему WMP может воспроизводить анимацию без разрывов или я что-то упустил? Можно ли каким-либо образом использовать DirectX (или что-то еще), чтобы моя программа могла знать, где находится текущая строка сканирования, и если да, то есть ли способ использовать эту информацию, чтобы исключить разрывы без фактического использования DirectX для отображения клеток? Или мне нужно полностью использовать DirectX для рендеринга, чтобы справиться с этой проблемой?
Обновление : забыл деталь. Мое приложение отображает каждую ячейку в PictureBox, используя Graphics.DrawImage. Является ли это значительно медленнее, чем использование BitBlt, чтобы я мог устранить хотя бы некоторые разрывы с помощью BitBlt?
Обновление 2 : эффект, который я вижу, определенно не мерцает (что отличается от разрыва). Моя панель имеет двойную буферизацию, устанавливает стили элементов управления для AllPaintingInWmPaint, UserPaint, OptimizedDoubleBuffer и т. Д., Переопределяет onPaintBackGround и так далее. Все это необходимо для устранения мерцания, но проблема разрыва остается. Это особенно заметно, когда анимация имеет очень быстро движущиеся объекты или объекты, которые очень быстро меняются от светлого к темному. Когда объекты движутся медленно и не меняют цвет быстро, эффект разрыва гораздо менее заметен (потому что последовательные клетки всегда очень похожи друг на друга).