C#动画替代品

时间:2015-08-31 09:21:14

标签: c# wpf user-interface animation mouse

我试图让2个椭圆在屏幕(画布)上移动,坐标来自2个Wiimote设备。就像鼠标一样。需要记录坐标,以便最好能在动画方法之后完成。到目前为止,我尝试使用TranslateTransform但是Ellipses非常小,并且不适合用户体验。我也尝试使用PointAnimation和Storyboard,但问题是坐标没有预设,并且每次触发WiimoteChanged事件时都会调用该方法,所以在第二种方法中,由于事件被触发了数百次,所以这一点根本就没有了。每秒。

我有什么选择?

1 个答案:

答案 0 :(得分:0)

我相信您应该通过更改其父位置或相对于父级的偏移量来更改椭圆位置。我创建了一个小例子,其中红色椭圆跟随鼠标光标,它看起来很好。 您可能应该在某个时刻查看装饰者的方向,以免干扰您应用的主视觉树。 这是代码。只需将其放在新创建的主窗口中即可。

  public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.Content = new TestEllipse();
        }

        public class TestEllipse : Canvas
        {
            private Ellipse MyEllipse;
            public TestEllipse()
            {
                MyEllipse = new Ellipse() { StrokeThickness = 1, Fill = Brushes.Red, Height = 100, Width = 100 };
                this.Children.Add(MyEllipse);
                this.Loaded += TestEllipse_Loaded;
            }

            void TestEllipse_Loaded(object sender, RoutedEventArgs e)
            {
                var wnd = GetWindow(this);
                wnd.MouseMove += wnd_MouseMove;
            }

            void wnd_MouseMove(object sender, MouseEventArgs e)
            {
                var coords = e.GetPosition(sender as Window);
                Canvas.SetLeft(MyEllipse, coords.X - MyEllipse.Width / 2);
                Canvas.SetTop(MyEllipse, coords.Y - MyEllipse.Height / 2);
            }
        }
    }