Я двигаю 3d камеру вот так:
Point3DAnimation pa;
// Triggered by user click
void MoveCamera(object sender, EventArgs e)
{
pa = new Point3DAnimation(myPoint3D, TimeSpan.FromMilliseconds(2000));
pa.Completed += new EventHandler(pa_Completed);
Camera.BeginAnimation(PerspectiveCamera.PositionProperty, pa); // anim#1
}
// we're in place. do some idle animation
void pa_Completed(object sender, EventArgs e)
{
pa = new Point3DAnimation(myPoint3Ddz, TimeSpan.FromMilliseconds(5000));
Camera.BeginAnimation(PerspectiveCamera.PositionProperty, pa); // anim#2
}
- Пользователь нажимает.
- Камера перемещается в выбранное положение (анимация № 1).
- Когда заканчивается анимация № 1, воспроизводится анимация № 2.
Все в порядке ... до тех пор, пока пользователь не запустит MoveCamera, когда предыдущая анимация # 1 не будет завершена.
В этом случае:
- Новый аним # 1 запускается.
- Завершено событие старого анима # 1.
- anim # 2 запускается мгновенно (с перекрытием нового anim # 1).
2 & 3 здесь не правы. Как я могу избежать этого?
Я думаю, что pa_Completed () должен обнаружить, что новый anim # 1 уже играет, или MoveCamera () должен отменить регистрацию события Complete из старого anim # 1. Но какой правильный способ сделать это?