AS3动画制作中几类运动的实现及应用

2023-02-26

一、引言

在利用AS3实现角色运动其实就是通过不断设置对象的X属性和Y属性以改变对象位置来实现的。X属性和Y属性的改变量一般由运动的函数决定, 改变频率可以利用ENTER_FRAME事件和时间事件来确定。为了更好的诠释各种类型的运动, 下面通过分析和举例来说明常见的角色运动实例。

二、直线运动

直线运动是运动的最常见形式, 是一种对象在舞台上的线性运动方式。对象的移动动画实际上是对象在舞台上的位置不断改变的结果。因此在编写程序时, 可用通过循环不断地改变对象的X属性或Y属性的值来获得对象沿直线运动的动画效果。如直线运动:

stage.addEventListener (Event.ENTER_FRAME, zhi) ;

function zhi (e:event)

{对象.x+=xspeed;对象.y+=yspeed;}

变量xspeed, yspeed决定了对象在X轴方向和Y轴方向上每次循环的移动距离, 这两个变量的值将决定了对象在X轴和Y轴方向上的速度, 它们的值越大, 对象运动的速度就越快。将X轴和Y轴方向上的偏移量合成, 即可获得对象在舞台上从一点移动到一点的斜向运动效果, 斜向运动的方向可以通过变量xspeed, yspeed的大小和正负来控制。

三、圆形、椭圆形等曲线运动

AS3的Math类是动画编程中使用较多的一个顶级类。该类的方法和属性可以用来访问和处理数学属性函数或常数。使用Math类的sin () 方法和cos () 方法可以获得圆形或椭圆形的运动轨迹。如圆形运动:

stage.addEventListener (Event.ENTER_FRAME, yuan) ;

function yuan (e:event)

{对象.x=centerX+Math.sin (angle) *r;

对象.y=centerY+Math.cos (angle) *r;

angle+=speed;}

centerX和centerY为圆形轨迹的圆心在屏幕上的位置, 变量angle为一个以弧度为单位的角度, r为圆形轨迹的半径。在循环中, angle的值不断改变, 其每次的变化量由speed变量的大小决定。

如椭圆形运动:

stage.addEventListener (Event.ENTER_FRAME, tuo) ;

function tuo (e:event)

{对象.x=centerX+Math.sin (angle) *rx;

对象.y=centerY+Math.cos (angle) *ry;

angle+=speed;}

centerX和centerY为椭圆形轨迹的圆心在屏幕上的位置, 变量angle为一个以弧度为单位的角度, rx, ry为椭圆形轨迹的长半轴和短半轴。在循环中, angle的值不断改变, 其每次的变化量由speed变量的大小决定。

如正弦曲线运动:

stage.addEventListener (Event.ENTER_FRAME, zhengxian) ;

function zhengxian (e:event)

{对象.x+=xspeed;

对象.y=centerY+Math.sin (angle) *range;

angle+=yspeed;}

变量xspeed和yspeed能够决定对象在横轴和纵轴方向上的移动速度, centerY的值决定了正弦曲线轨迹在屏幕上纵轴方向的位置, range的值决定了运动轨迹相对于centerY的变化大小。

四、加速运动

在AS3中, 加速度实际上就是添加到速度上的一个数值。在循环中添加下面的代码就可以实现对象在X轴方向上的加速运动, 其加速度值为变化量a的值越大, 对象速度增加得就越快。如X轴方向上的加速运动:

stage.addEventListener (Event.ENTER_FRAME, jiasu) ;

function jiasu (e:event)

{xspeed+=ax;yspeed+=ay;对象.x+=xspeed;对象.y+=yspeed;}

xspeed和yspeed为沿x轴和y轴的速度, ax和ay为x轴和y轴上的加速度, 可以通过ax和ay的正负值确定速度的方向和改变量。

五、受摩擦力的运动

在动画制作中, 运动的物体都将受到阻力的作用, 这个阻力将阻止物体的运动, 从而试图减小它的速度, 在现实生活中摩擦力可减小物体运动的速度使对象速度逐渐减小。实现这类动画要知道摩擦力系数的值。如带阻力 (摩擦力) 的运动:

stage.addEventListener (Event.ENTER_FRAME, moca) ;

function moca (e:event)

{xspeed*=f;yspeed*=f;对象.x+=xspeed;对象.y+=yspeed;}

xspeed和yspeed为沿x轴和y轴的速度, 变量f可以取0~1之间的值, 可以通过ax和ay的正负值确定速度的方向和改变量。

六、缓动

所谓缓动指对象滑动到接近目标位置后缓慢停止下来。这种动画的特征是开始对象速度很快, 然后逐渐慢下来[1]。对象离目标点距离越远, 速度越快;越靠近目标, 速度越慢;实现缓动效果应知道缓动系数, 该值是小于1的小数, 然后计算对象与运动目标点之间的距离, 用该距离乘以缓动系数即可获得速度值, 接着将该速度值加到对象位置坐标上, 通过循环执行即可实现缓动效果。如缓动效果的运动:

stage.addEventListener (Event.ENTER_FRAME, huandong) ;

function huandong (e:event)

{xspeed= (target.x-对象.x) *easing;yspeed= (target.y-对象.y) *easing;

对象.x+=xspeed;对象.y+=yspeed;}

xspeed和yspeed为沿x轴和y轴的速度, target.x和target.y是指目标对象的坐标, 变量easing是缓动系数, 可以取0~1之间的值。

七、弹性运动

所谓弹性运动指对象以某种规律在目标点附近进行的往返运动。弹性运动在运动过程中越接近起点速度越快, 越过起点后, 由于拉力的作用其速度会逐渐减小并停止, 然后物体朝反方向运动, 重复以上的运动过程多次后停止在起点处[1]。在生活中这种运动较常见, 如弹簧的一端挂接一个物体, 拉长后释放, 物体受到弹簧的拉力会飞速向起点运动朝起点另一边运动, 运动到另以端的终点后返回。如弹性运动:

stage.addEventListener (Event.ENTER_FRAME, tanxing) ;

function tanxing (e:event)

{dx=target.x-对象.x;

dy=target.y-对象.y;

ax=dx*spring;

ay=dy*spring;

xspeed+=ax

yspeed+=ay;

对象.x+=xspeed;

对象.y+=yspeed;}

xspeed和yspeed为沿x轴和y轴的速度, target.x和target.y是指目标对象的坐标, ax和ay为x轴和y轴上的加速度, 变量spring是弹性系数, 可以取0~1之间的值。

八、3D运动

AS3中显示对象除了具有x属性和y属性外还有一个z属性, 该属性值决定对象在三维坐标系中Z轴上的位置。如果是运动可以增加在z轴上的改变量;如果是旋转可以增加rotationZ属性绕Z轴旋转。如在x, y, z轴方向上运动和旋转的运动:

stage.addEventListener (Event.ENTER_FRAME, sand) ;

function sand (e:event)

{对象.x+=a;对象.y+=b;对象.z+=c;

对象.rotationX+=d;对象.rotationY+=e;对象.rotationZ+=f;}

在这段代码中, a, b, c, d, e, f为变量, rotationX, rotationY, rotationZ为对象绕x, y, z的旋转角度属性。如果对象要进行更为复杂的3D操作, 需要用到Matrix3D类、Vector3D类和PerspectiveProjection类。

Matrix3D类表示一个转换矩阵 (如图1所示) , 它确定了三维显示对象的位置和方向, 能过方便的实现三维对象的平移、旋转和缩放。

Matrix3D类使用一个4X4正方形矩阵, 该矩阵是一个4行4列的数字构成的表, 其中容纳了用于进行三维转换的数据。在矩阵的前三行放置三维轴数据, 即x、y和z值, 最后一列放置平移数据, 方向和缩放数据于前3列中, 缩放因子放置在前3列的对角线位置。将对象的z属性设置为默认值0之外的其他值时会自动创建一个相应的Matrix3D对象。该三维对象遵循三维转换和透视投影的规则, 其初始值基于x, y和z属性, 可以通过显示对象的transform属性来对该对象进行访问。在创建Matrix3D对象时, 可以使用一个由16个数字组成的矢量来对其初始化。使用rawData属性来访问该对象的矩阵元素。使用appendRotation () 方法或prepenRotation () 方法可以在Matrix3D对象上后置或前置一个旋转增量, 使用appendScale () 方法或prependScale () 方法可以在Matrix3D对象上后置或前置一个缩放量, 使用appendTranslation () 方法或prependTranslation () 方法可以在Matrix3D对象上后置或前置一个平移增量。如语句:prependRotation (degree:number, axis:Vector3D, pivotPoint:Vextion3D) :void。这里degree表示旋转的角度;axis表示旋转的轴或方向, 旋转轴包括XAXIS, YAXIS和ZAXIS;pivotPoint表示用于确定旋转中心的点, 默认为对象的注册点。

九、总结

运动是动画制作中不可缺少的一种效果, 这里针对动画制作中常见的运动效果的实现方式进行了介绍。通过掌握这些基本的运动实现方法才能在模拟现实的运动效果编程中实现各种更复杂运动。

【相关链接】

3D故事板 (Layout) ——用3D粗模根据剧本和分镜故事板制作出Layout (3D故事板) 。其中包括软件中摄像机机位摆放布置、基本动画、镜头时间定制等学问。3D角色建模型、3D场景、3D道具模型——根据概念设计以及客户、监制、导演等的综合意见, 在三维软件中中止模型的精确制作, 是最终动画成片中的全部“演员”。

贴图材质——根据概念设计以及客户、监制、导演等的综合意见, 对3D模型“化装”, 中止颜色、纹理、质感等的设定工作, 是动画制作流程中的必不可少的重要环节。

骨骼蒙皮——根据故事情节分析, 对3D中需求动画的模型 (主要为角色) 中止动画前的一些变形、动作驱动等相关设置, 为动画师做好准备工作, 提供动画处置方案。

分镜动画——参考剧本、分镜故事板, 动画师会根据Layout的镜头和时间, 给角色或其它需求活动的对象制作出每个镜头的扮演动画, 有人工设定关键帧, 也有动作捕捉器。

动画调理在三维动画中是与二维动画类似的思索方法, 但在这个工作上三维动画有很大的优势。我们知道二维动画在制作时有“原画师”和“动画师或中间画”, 在三维动画的世界之中设计者做的是“原画师”的工作, 我们操作骨骼系统在不同的关键帧设定动画。而“动画师”的工作则全部由计算机自动完成。

分镜故事板——根据文字创意剧本中止的理论制作的分镜头工作, 手绘图画构筑出画面, 解释镜头运动, 讲述情节给后面三维制作提供参考。

粗模——在三维软件中由建模人员制作出故事的场景、角色、道具的粗略模型, 为故事板做准备。

摘要:文章通过编写AS3脚本程序来控制直线运动、圆形和椭圆、曲线、弹性及3D运动等, 分析各类运动的实现方法和机制, 并举例来模拟真实的运动效果, 为一线教师编写各类与运动相关的教学课件提供帮助。

关键词:ActionScript3,运动,课件

参考文献

[1] 王玥, 吕天君.Flash游戏开发技术与实践[M].北京:清华大学出版社, 2013.2.影视动画制作

上一篇:高校播音主持专业翻转课堂实施研究下一篇:放疗同步周剂量紫杉醇方案治疗食管癌的临床研究