c#动画替代

本文关键字:动画 | 更新日期: 2023-09-27 18:10:26

我试图得到2个椭圆移动屏幕(画布)与坐标从2个Wiimote设备。就像老鼠的行为一样。坐标将需要被记录,所以如果可以在动画方法之后完成,那将是最好的。到目前为止,我尝试了TranslateTransform,但椭圆移动非常小故障,不适合用户体验。我还尝试使用PointAnimation和Storyboard,但问题是坐标没有预设,每次WiimoteChanged事件被触发时都会调用该方法,所以在第二种方法中,点根本不移动,因为事件每秒被触发几百次。

我在这里有什么选择?

c#动画替代

我认为你应该通过改变它的父位置或相对于父位置的偏移量来改变椭圆的位置。我创建了一个小例子,其中红色椭圆跟随鼠标光标,它看起来很好。你应该在某个时候看看装饰器的方向,以免干扰应用程序的主视觉树。下面是代码。把它放在新创建的主窗口中。

  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);
            }
        }
    }