WPF 旋转动画

Dear200892 2019-09-02 11:20:16

蹭着空闲期,自己编写了一个垃圾飞行棋
现在蓝色棋子停在坐标点(4,12)
下一格方格坐标为(6,11)

通过Math.Atan2函数求得两点之间的角度(map为下格方格坐标,postion为当前停落的坐标)
double angle = Math.Atan2((map.PointY - postion.Y), (map.PointX - postion.X)) * 180 / Math.PI;

现在旋转的角度错误,朝向应该是橙色箭头。
旋转动画代码如下:

//设置旋转方向
RotateTransform rotate = new RotateTransform();
//绑定旋转中心
chess.RenderTransform = rotate;
//设置旋转中心百分比
chess.RenderTransformOrigin = new Point(0.5, 0.5);
Storyboard story = new Storyboard();
DoubleAnimation doubleAnimation = new DoubleAnimation(chess.Angle, angle, new Duration(TimeSpan.FromSeconds(100)));
Storyboard.SetTarget(doubleAnimation, chess);
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("RenderTransform.Angle"));
story.Children.Add(doubleAnimation);
story.Begin();

chess为棋子,chess.Angle初始角度,angle目标角度,动画执行事件100ms

不知道哪里出错了!!!若能解决,可加分!!!
...全文
3232 62 打赏 收藏 转发到动态 举报
写回复
用AI写文章
62 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dear200892 2019-09-09
  • 打赏
  • 举报
回复
引用 61 楼 皮皮熊_1989 的回复:
好多年不撸wpf了。。。忘的差不多了,当年能写很多酷炫特效几年不撸现在费了
从开始读书到现在,一直都没有绘画天赋
皮皮熊_1989 2019-09-09
  • 打赏
  • 举报
回复
好多年不撸wpf了。。。忘的差不多了,当年能写很多酷炫特效几年不撸现在费了
Dear200892 2019-09-05
  • 打赏
  • 举报
回复
引用 59 楼 陶玉霖 的回复:
Atan2计算得出的单位是弧度值吗
结果是需要旋转的角度,比如145°
Dear200892 2019-09-04
  • 打赏
  • 举报
回复
引用 54 楼 窦性心律心动过速 的回复:
6666666666666666666
Dear200892 2019-09-04
  • 打赏
  • 举报
回复
引用 53 楼 Re-Defining 的回复:
哇你这个好棒耶
Dear200892 2019-09-04
  • 打赏
  • 举报
回复
引用 55 楼 weixin_44789622 的回复:
弧度值与角度值的转换问题??!
不是,动画绑定的时候错了缺少 button.XX
陶玉霖 2019-09-04
  • 打赏
  • 举报
回复
Atan2计算得出的单位是弧度值吗
疯子突击 2019-09-04
  • 打赏
  • 举报
回复
弧度值与角度值的转换问题??!
Dear200892 2019-09-03
  • 打赏
  • 举报
回复
最终解决方案:

 chess.Dispatcher.Invoke(() =>
            {
                //设置旋转方向
                RotateTransform rotate = new RotateTransform();
                //绑定旋转中心
                chess.RenderTransform = rotate;
                //设置旋转中心百分比
                chess.RenderTransformOrigin = new Point(0.5, 0.5);
                //创建故事板
                Storyboard story = new Storyboard();
                //实例化一个Double类型的动画
                DoubleAnimation doubleAnimation = new DoubleAnimation(chess.Angle, angle + 90, new Duration(TimeSpan.FromSeconds(FromMilliseconds / 5)));
                //给动画指定对象
                Storyboard.SetTarget(doubleAnimation, chess);
                //给动画指定依赖的属性
                Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Button.RenderTransform).(RotateTransform.Angle)"));
                //将动画添加到动画板中
                story.Children.Add(doubleAnimation);
                //启动动画
                story.Begin();
            });
            chess.Angle = angle;
对比原始:

                //实例化一个Double类型的动画
                DoubleAnimation doubleAnimation = new DoubleAnimation(chess.Angle, angle + 90, new Duration(TimeSpan.FromSeconds(FromMilliseconds / 5)));
               //给动画指定依赖的属性
                Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Button.RenderTransform).(RotateTransform.Angle)"));
qq84628151 2019-09-03
  • 打赏
  • 举报
回复
引用 48 楼 Dear200892 的回复:
[quote=引用 47 楼 qq84628151 的回复:] 要不你把代码发给我看看好了,我帮你搞好
联系方式[/quote] qq 1018720141
Dear200892 2019-09-03
  • 打赏
  • 举报
回复
引用 47 楼 qq84628151 的回复:
要不你把代码发给我看看好了,我帮你搞好
联系方式
qq84628151 2019-09-03
  • 打赏
  • 举报
回复
要不你把代码发给我看看好了,我帮你搞好
qq84628151 2019-09-03
  • 打赏
  • 举报
回复
我试了一下,其实你的公式没错,也不是y轴问题,应该是你面向角度搞错了吧
qq84628151 2019-09-03
  • 打赏
  • 举报
回复
引用 44 楼 Dear200892 的回复:
[quote=引用 42 楼 qq84628151 的回复:] 上面的+270,应该是因为0度,向上的。正常是0度,是向右。所以你+270,或者-90。都无所谓的
你这里就比我多了一个【+270】[/quote] 因为我是高度350,宽为3,角度0是向上的。假如宽度和高度换一下,就不需要+270或者-90了
Dear200892 2019-09-03
  • 打赏
  • 举报
回复
引用 42 楼 qq84628151 的回复:
上面的+270,应该是因为0度,向上的。正常是0度,是向右。所以你+270,或者-90。都无所谓的
你这里就比我多了一个【+270】
  • 打赏
  • 举报
回复
6666666666666666666
Re-Defining 2019-09-03
  • 打赏
  • 举报
回复
哇你这个好棒耶
Dear200892 2019-09-03
  • 打赏
  • 举报
回复
引用 51 楼 weixin_45601378 的回复:
回帖,新人报道,想赚几个积分,不知道咋操作
每天水回复就有积分
SAGW~小员工 2019-09-03
  • 打赏
  • 举报
回复
回帖,新人报道,想赚几个积分,不知道咋操作
  • 打赏
  • 举报
回复
wpf不熟,不要再邀请我回答了
加载更多回复(42)

110,556

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧