[遇见君] 这里推荐下面刘瑞祥老师本人的微信号,欢迎各位老师朋友多多关注支持!
PowerPoint 里的路径动画,往往不容易精确设定,这对我们制作数学、物理类动画是个挑战。要精确设定动画的路径,一种可能的方法就是编程。下面是一段相应的代码,要正常运行需要在幻灯片的第一页里至少有一个可以移动的对象,比如一个图形。
Sub AddMotionPath()
Dim shp As Shape, eff As Effect , aniMotion As AnimationBehavior
Set shp = ActivePresentation.Slides(1).Shapes(1)
Set eff = ActivePresentation.Slides(1).TimeLine.MainSequence. AddEffect( _
Shape:=shp,effectId:=msoAnimEffectCustom, Trigger:=msoAnimTriggerOnPageClick)
Set aniMotion = eff.Behaviors.Add(msoAnimTypeMotion)
aniMotion.MotionEffect.Path = "m 0 0 c 0.1 0 0.2 0.2 0.1 0.4 Z L 0.5 0 E"
End Sub以上先引用了第一页幻灯片里的这个对象,即给 shp 对象赋值,然后再给 eff 对象赋值,注意 AddEffect 后面的三个参数了吗?第一个参数是效果所针对的对象,第二个参数是动画类别为自定义,第三个参数是指定单击鼠标时发生动画。这之后又是一个添加行为的语句。然后是本文最关键的设置动画路径即 Path 参数的设置。要改变动画路径,只需要改变这里。
以上先引用了第一页幻灯片里的这个对象,即给shp对象赋值,然后再给eff对象赋值,注意AddEffect后面的三个参数了吗?第一个参数是效果所针对的对象,第二个参数是动画类别为自定义,第三个参数是指定单击鼠标时发生动画,这种“变量名:=值”的写法不限于给给对象变量赋值,而且便于维护代码。这之后又是一个添加行为的语句。然后是本文最关键的设置动画路径即Path参数的设置。要改变动画路径,只需要改变这里。
下面解释一下路径字符串的含义:
● M 表示瞬间移动到某个位置,后面跟着一个横纵坐标,注意 M 和两个坐标之间都用半角空格隔开(后同);
● L 表示直线路径,后面跟着终点坐标;
● C 表示三次贝塞尔曲线,后面跟着第一控制点坐标、第二控制点坐标和终点坐标,这三个坐标顺序是x₁y₁x₂ y₂ x₃ y₃;
● Z 表示回到开始位置(闭合),无参数;
● E 表示终止,无参数。
这里坐标的含义是,横纵坐标分别以幻灯片页面的长宽为 1,以向右和向下为正。比如要使对象向右平移幻灯片宽度的一半,则路径是"M 0 0 L 0.5 0"。另外,按照一些资料的说明,以上字母大写表示相对位置,小写表示绝对位置。所谓相对位置,就是相对于物体上一条路径终点的坐标,绝对位置是相对于幻灯片左上角的坐标。大家可以尝试以下两个路径,也可以尝试大小写的其它组合:
● "M 0.1 0 L 0.5 0"
● "m 0.1 0 l 0.5 0"
为了更好地观察效果,建议大家用直线把幻灯片页面横向等分成 10 份,然后把要移动的物体放在第二条线上(最好先清空页码里全部对象,然后画小球,最后画竖线,这样小球就是页面里第一个对象了,不至于还需要调整代码中 Shapes 后面的序号)。
以上代码在执行过程有个问题:要移动的对象开始时并没有出现,是在单击鼠标后才突然出现并移动的。这往往和我们的需求不符。解决这个问题的方法是:再设计一个让该对象“出现”的动画,并把这个“出现”动画设置为进入这一页时同时出现。另外用代码设置路径动画是无法在设计时显示路径的,这一点也和我们通常设置路径动画的方法不同。
以上代码运行一次即可设置好动画,然后就可以删掉语句,或者直接把文件保存成 pptx、ppt 格式,而不用保存成 pptm 格式了。另外本文只涉及动画路径的编程,没有关于动画时间等等的编程。
发表回复