Я хотел бы получить информацию о анимации в WPFМОФ анимация с WinMM
, потому что мне нужен очень точный рендеринг, я решил использовать мультимедийный таймер вместо таймера анимации по умолчанию ...
Так Я хотел бы знать, как работают часы анимации ... Я думал о том, чтобы поднимать событие галочки каждые 2 мс и вызывать диспетчерский вызов (я не уверен, что интервал 2 мс достаточен для перемещения строки, но если мое понимание хорошее, диспетчер справится с этим, нет??
public void setTime(int TimeInMs)
{
AnimatedLine.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
AnimatedLine.X1 = TimeInMs/10 * ZoomRatio;
AnimatedLine.X2 = TimeInMs/10 * ZoomRatio;
}
));
это лучший способ сделать это?
Кроме того, я хотел бы знать, как вы можете испытать некоторый набор каждые 2 мс ...
На данный момент, я действительно думаю, что это невозможно в цикле коллекцию каждые 2мс (например, из 100 объектов), так что я вы решили использовать словари ... (используя ключ как ссылку времени), если есть лучший вариант, я буду рад услышать ...
Я действительно не понимаю ... Диспетчер не предназначен для решения этой проблемы? самые важные вещи для анимации - это то, что она отлично синхронизируется с таймером MultiMedia, как часы, я пытаюсь использовать диспетчер-таймер, но он не может обрабатывать точность часов, кстати, он потерял почти 1 секунду каждый 10, в зависимости от заряда процессора /// – guillaume
Если вы накладываете частоту кадров в систему рендеринга (в вашем случае 1 кадр каждые 2 мс, или 500 кадров в секунду), у вас будут проблемы, если он не справится с этим. Если вы устанавливаете 500 операций в секунду в диспетчере, и он может обрабатывать только 100 действий в секунду, очередь будет продолжать расти, и ваша анимация будет выглядеть странно. Итак, не налагайте частоту кадров, а не анимируйте свои объекты на основе времени, прошедшего с момента последней анимации. –
Хорошо спасибо, это совершенно разумно и работает! но мне нужно удалить событие CompositionTarget.Rendering, если TimeValue не изменяется (потому что я получаю это значение для каждого кадра) – guillaume