<<Flash.ActionScript3.0动画教程>>

第三章 三角学

3.1 基本三角函数的计算:
 角的正弦值 = 对边 / 斜边
 角的余弦值 = 邻边 / 斜边
 角的正切值 = 对边 / 邻边

3.2 角度与弧度的相互装换:
 弧度 = 角度 * Math.PI / 180
 角度 = 弧度* 180 / Math.PI

3.3 向鼠标旋转:

//substitute mouseX, mouseY with the x , y point to rotate to
 dx = mouseX - sprite.x;
 dy = mouseY - sprite.y;
 spirte.rotation = Math.atan2(dy, dx) * 180 / Math.PI;

3.4 创建波形:

 //assign value to x, y or other property of sprite or movie clip,
 //use as drawing coordinates, etc.
 public function OnEnterFrame(event : Event)
 {
  value = center + Math.sin(angle) * range;
  angle += speed;
 }

3.5 创建圆形:

 //assign position to x and y of sprte or movie clip,
 //use as drawing coordinates, etc.
 public function OnEnterFrame(event : Event)
 {
  xposition = centerX + Math.cos(angle) * radius;
  yposition = centerY + Math.sin(angle) * radius;

  angle += speed;
 }

3.6 创建椭圆:

//assign position to x and y of sprite or movie clip,
 //use as drawing coordinates, etc.
 public function OnEnterFrame(event : Event) : void
 {
  xposition = centerX + Math.cos(angle) * radiusX;
  yposition = centerY + Math.sin(angle) * radiusY;

  angle += speed;
 }

3.7 计算两点间的距离:

 //points are x1, y1 and x2, y2
 //can be sprite / movie clip positions, mouse coordinates, etc.
 dx = x2 - x1;
 dy = y2 - y1;

 dist = Math.sqrt(dx * dx + dy * dy);

 

第四章 渲染技术

4.1 转换为十进制:
 trace(hexValue);
 十进制转换成十六进制:
 trace(decimalValue.toString(16));
4.2 颜色合成:
 color24 = red << 16 | green << 8  | blue;
 color32 = alpha << 24 | red << 16 | green << 8 | blue;
4.3 颜色提取:
 red = color24 >> 16; green = color24 >> 8 & 0xFF; blue = color24 & 0xFF;
 alpha = color32 >> 24; red = color32 >> 16 & 0xFF; green = color32 >> 8 & 0xFF; blue = color32 & 0xFF;
4.4 过控制点的曲线:

 //xt, yt is the point you want to draw through
 //x0, y0 and x2, y2 are the end points of the curve
 x1 = xt * 2 - (x0 + x2) / 2;
 y1 = yt * 2 - (y0 + y2) / 2;
 moveTo(x0, y0);
 curveTo(x1, y1, x2, y2);

 

 第五章 速度与加速度

5.1 角速度转换为x,y速度向量:
 vx = speed * Math.cos(angle);
 vy = speed * Math.sin(angle);
5.2 角加速度(作用于物体上的force)转换为x, y加速度:
 ax = force * Math.cos(angle);
 ay = force * Math.sin(angle);
5.3 将加速度加入速度向量:
 vx += ax;
 vy += ay;
5.4 将速度向量加入坐标:
 movieclip._x += vx;
 sprite.y += vy;

第六章 边界与摩擦力

6.1 移除出界对象:

 if(sprite.x - sprite.width / 2 > right ||
  sprite.x + sprite.width / 2 < left ||
  sprite.y - sprite.height / 2 > bottom ||
  sprite.y + sprite.height / 2 < top)
 {
  //移除影片的代码
 }

6.2 重置出界对象:

 if(sprite.x - sprite.width / 2 > right ||
  sprite.x + sprite.width / 2 < left ||
  sprite.y - sprite.height / 2 > bottom ||
  sprite.y + sprite.height / 2 < top)
 {
  //重置对象位置和速度
 }

6.3 屏幕环绕出界对象:

 if(sprite.x - sprite.width / 2 > right)
 {
  sprite.x = left - sprite.width / 2;
 }
 else if(sprite.x + sprite.width / 2 < left)
 {
  sprite.x = right + sprite.width / 2;
 }

 if(sprite.y - sprite.height / 2 > bottom)
 {
  sprite.y = top - sprite.height / 2;
 }
 else if(sprite.y + sprite.height / 2 < top)
 {
  sprite.y = bottom + sprite.height / 2;
 }

6.4 摩擦力应用(正确方法):

 speed = Math.sqrt(vx * vx + vy * vy);
 angle = Math.atan2(vy, vx);

 if(speed > friction)
 {
  speed -= friction;
 }
 else
 {
  speed = 0;
 }

 vx = Math.cos(angle) * speed;
 vy = Math.sin(angle) * speed;

6.5 摩擦力应用(简便方法):
 vx *= friction;
 vy *= friction;

第七章 交互动画--移动物体

 7.1 鼠标的基本事件:按下,弹起以及移动的基本应用
 7.2 鼠标拖拽的实现:第一,使用MouseMove事件实现,可以拖拽多个物品。第二,用内置的startDrag一次只能拖一个。
 7.3 结合运动小球代码实现拖拽
 7.4 投掷功能的实现。

第八章 缓动与弹性运动

 8.1 简单缓动,长形:

 var dx : Number = targetX - sprite.x;
 var dy : Number = targetY - sprite.y;
 vx = dx * easing;
 vy = dy * easing;
 sprite.x += vx;
 sprite.y += vy;

8.2简单缓动,中形:

 vx = (targetX - sprite.x) * easing;
 vy = (targetY - sprite.y) * easing;
 sprite.x += vx;
 sprite.y += vy;

8.3简单缓动,短形:

 sprite.x += (targetX - sprite.x) * easing;
 sprite.y += (targetY - sprite.y) * easing;

8.4 简单弹性,长形:

 var ax : Number = (targetX - sprite.x) * spring;
 var ay : Number = (targetY - sprite.y) * spring;
 vx += ax;
 vy += ay;
 vx *= friction;
 vy *= friction;
 sprite.x += vx;
 sprite.y += vy;

8.5 偏移弹性运动:

var dx : Number = sprite.x - fixedX;
 var dy : Number = sprite.y - fixedY;
 var angle : Number = Math.atan2(dy, dx);
 var targetX : Number = fixedX + Math.cos(angle) * springLength;
 var targetY : Number = fixedY + Math.sin(angle) * springLength;

 

第九章 碰撞检测

9.1 距离碰撞检测:

//从spriteA 和spriteB开始,如果使用空白影片或没有半径则用宽度与高度除以2
 var dx : Number = spriteB.x - spriteA.x;
 var dy : Number = spriteB.y - spriteA.y;
 var dist : Number = Math.sqrt(dx * dx + dy * dy);
 if(dist < spriteA.radius + spriteB.radius)
 {
  //处理碰撞
 }

9.2 多物体碰撞检测:

 var numObjects : uint = 10;
 for(var i : uint = 0; i < numObjects - 1; i++)
 {
  var objectA = objects[i];
  for(var j : uint = i + 1; j < numObjects; j++)
  {
   var objectB = objects[j];

   if(objectB.hitObjectTest(objectA))
   {
    //碰撞处理
   }
  }
 }

 

第十章 坐标选装及角度反弹

10.1 坐标旋转:

 x1 = Math.cos(angle) * x - Math.sin(angle) * y;
 y1 = Math.cos(angle) * y + Math.sin(angle) * x;

10.2 反坐标旋转:

 x1 = Math.cos(angle) * x + Math.sin(angle) * y;
 y1 = Math.cos(angle) * y - Math.sin(angle) * x;

 

第十一章 撞球物理

11.1 动量守恒的数学表达式:
 v0Final = ((m0 - m1) * v0 + 2 * m1 * v1) / m0 + m1;
 v1Final = ((m1 - m0) * v1 + 2 * m0 * v0) / m0 + m1;

11.2 动量守恒ActionScript表达式:

 var vxTotal : Number = vx0 - vx1;
 vx0 = ((ball0.mass - ball1.mass) * vx0 + 2 * ball1.mass * vx1) / (ball0.mass + ball1.mass);
 vx1 = vxTotal + vx0;

 

第十二章 粒子引力与万有引力

12.1 引力一般公式:
 force = G * m1 * m2 / distance * distance;

12.2 ActionScript实现万有引力:

 function Gravitate(partA : Ball, partB : Ball) : void
 {
  var dx : Number = partB.x - partA.x;
  var dy : Number = partB.y - partA.y;
  var distSQ : Number = dx * dx + dy * dy;
  var dist : Number = Math.sqrt(distSQ);
  var force : Number = partA.mass * partB.mass / distSQ;
  var ax : Number = force * dx / dist;
  var ay : Number = force * dy / dist;
  partA.vx += ax / partA.mass;
  partA.vy += ay / partA.mass;
  partB.vx -= ax / partB.mass;
  partB.vy -= ay / partB.mass;
 }

 


第十三章 正向运动学:行走
第十四章 反向运动学:拖拽与伸展

14.1 余弦定理:
 a*a = b * b + c * c - 2 * b * c * cosA
 b * b = a * a + c* c - 2 * a * c * cosB
 c * c = a * a + b * b - 2 * a * b * cosC

14.2 ActionScript的余弦定理:

 var A : Number = Math.acos((b * b + c * c - a * a) / (2 * b * c));
 var B : Number = Math.acos((a * a + c * c - b * b) / (2 *a * c));
 var C : Number = Math.acos((a * a + b * b - c * c) / (2 * a * b));


第十五章 3D基础

15.1 基本透视法:

 scale = fl / (fl + zpos);
 sprite.scaleX = sprite.scaleY = scale;
 sprite.alpha = scale;//可选
 sprite.x = vanishingPointX + xpos * sclae;
 sprite.y = vanishingPointY + ypos * scale;

15.2 Z轴排序:

 //假设有一个带有Zpos属性的3D物体数组
 objectArray.sortOn("zpos", Array.DESCENDING | Array.NUMERIC);
 for(var i : uint = 0; i < numObjects; i++)
 {
  setChildIndex(objectArray[i], i);
 }

15.3 坐标旋转:

 x1 = cos(angleZ) * xpos - sin(angleZ) * ypos;
 y1 = cos(angleZ) * ypos + sin(angleZ) * xpos;
 x1 = cos(angleY) * xpos - sin(angleY) * zpos;
 z1 = cos(angleY) * zpos + sin(angleY) * xpos;
 y1 = cos(angleX) * ypos - sin(angleX) * zpos;
 z1 = cos(angleX) * zpos + sin(angleX) * ypos;

15.4 3D距离:
 dist = Math.sqrt(dx * dx + dy * dy + dz * dz);

第十六章 3D线条与填充

第十七章 背面剔除与3D灯光

第十八章 矩阵数学

第十九章 实用技巧

posted @ 2012-10-07 15:24  kiven.li  阅读(1295)  评论(0编辑  收藏  举报