gpt4 book ai didi

c# - 如何重新创建此 MouseMove 效果?

转载 作者:行者123 更新时间:2023-11-30 21:23:45 25 4
gpt4 key购买 nike

我正在 WPF 中开发一个表单使用视差滚动技术,我需要完成最后一步。我希望重新创建 this nice effect of the mouse .

我正在尝试在鼠标完成移动时获得很酷的延迟缓动。当鼠标完成移动时,背景稍后会慢慢停止移动,这可以通过缓动点轻松实现,但我不清楚如何实现。

我创建了 3 个背景,当鼠标移动时,我重新创建了视差滚动。现在我希望添加此功能以使其更加逼真。

你知道我怎样才能重现鼠标的这种效果吗?

编辑

我列出了我的代码片段以向您展示我如何在鼠标移动事件时移动 3 个背景:

private void Window_MouseMove(object sender, MouseEventArgs e)//it is the Layout Root that contain the 3 layouts to create the parallax effect
{
Point mouse = e.GetPosition(this);

TransformGroup group = (TransformGroup)this.grid.RenderTransform; //The first Background

TranslateTransform translate = (TranslateTransform)group.Children[3];

translate.X = 400 - mouse.X ;

translate.Y = 300 - mouse.Y;


TransformGroup group1 = (TransformGroup)this.grid1.RenderTransform;// 2th Background

TranslateTransform translate1 = (TranslateTransform)group1.Children[3];

translate1.X = 400 - (mouse.X - 10) * 2;

translate1.Y = 300 - (mouse.Y - 10) * 2;


TransformGroup group2 = (TransformGroup)this.grid2.RenderTransform;// 3th Background

TranslateTransform translate2 = (TranslateTransform)group2.Children[3];

translate2.X = 400 - (mouse.X - 20) * 3;

translate2.Y = 300 - (mouse.Y - 20) * 3;

}

也许这能让你更好地理解我的问题。

最佳答案

试试这个,有一个 Timer 重复调用你的 mouseMove 方法我稍作修改以调用实际上返回延迟的 mousePos 的 GetPos 方法。

这应该让你开始。

    public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Window1_Loaded);
}

private void Window1_Loaded(object sender, RoutedEventArgs e)
{
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer( System.Windows.Threading.DispatcherPriority.Render);
dispatcherTimer.Tick += new EventHandler(DispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0,0,0,0,15);
dispatcherTimer.Start();
}

double precision = 0.025;

Point GetPos (Point pt, Point target, double speed)
{
double xdif = target.X-pt.X;
double ydif = target.Y-pt.Y;
if (xdif>=-precision && xdif<=precision) pt.X = target.X;
else pt.X += (target.X-pt.X)*speed;

if (ydif>=-precision && ydif<=precision) pt.Y = target.Y;
else pt.Y += (target.Y-pt.Y)*speed;
return pt;
}

double speed = 0.1;
Point mouse = new Point();
private void DispatcherTimer_Tick(object sender, EventArgs e)
{
Point mousePos = Mouse.GetPosition(this); // change 'this' to a transparent element over your view if needed
mouse = GetPos (mouse, mousePos, speed);

TransformGroup group = (TransformGroup)this.grid.RenderTransform;
TranslateTransform translate = (TranslateTransform)group.Children[3];
translate.X = 400 - mouse.X ;
translate.Y = 300 - mouse.Y;

TransformGroup group1 = (TransformGroup)this.grid1.RenderTransform;
TranslateTransform translate1 = (TranslateTransform)group1.Children[3];
translate1.X = 400 - (mouse.X - 10) * 2;
translate1.Y = 300 - (mouse.Y - 10) * 2;

TransformGroup group2 = (TransformGroup)this.grid2.RenderTransform;// 3th Background
TranslateTransform translate2 = (TranslateTransform)group2.Children[3];
translate2.X = 400 - (mouse.X - 20) * 3;
translate2.Y = 300 - (mouse.Y - 20) * 3;
}

}

关于c# - 如何重新创建此 MouseMove 效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com