<<Flash.ActionScript.3.0动画高级教程>>

第一章 高级碰撞检测

1.1 不规则形状对象的碰撞测试:

 1.1.1 位图用于碰撞检测:
 函数原型如下:
 myBitmapData.hitTest(firstPoint : Point, firstAlphaThreshold : uint, secondObject : Object, secondPoint : Point, secondAlphaThreshold : uint)

 测试两个位图:
 if(bmpd1.hitTest(new Point(bmp1.x, bmp1.y), 255, bmpd2, new Point(bmp2.x, bmp2.y), 255))
 {
  //bitmap is touching bitmap
 }

 //测试位图与点,这里是位图与鼠标的碰撞检测:
 if(myBitmapData.hitTest(new Point(myBitmapData.x, myBitmapData.y), 255, new Point(mouseX, mouseY)))
 {
  //mouse is touching bitmap
 }
  
 1.1.2 半透明形状的碰撞测试:改变函数原型中的AlphaThreshold参数可以设定达到多少透明度就判定为碰撞。
 1.1.3 使用BitmapData.hitTest测试非位图对象:对于不是位图的比如:MoveClip、Sprite等只需创建相应的BitmapData然后不需要和Bitmap关联,也不需要加入到显示列表中。仅仅用来进行碰撞检测。

 1.2 大量对象的碰撞测试:

 1.2.1 实现基于网格的碰撞检测:将整个舞台划分为很多小区域,然后在小区域中进行碰撞检测,等小区域中检测完,再检测和邻近小区域之间是否有碰撞。
 1.2.2 编写网格代码:
 1.2.3 测试和调整网格:
 1.2.4 建成一个可重用的类:
 1.2.5 碰撞检测—并不只是碰撞:对于一定范围内的敌人进行攻击,也可以用网格方式实现。

第二章 转向行为

 2.1 行为:这里要讨论的行为包括搜寻、逃避、到达、追捕、躲避、漫游、对象规避、路径追随、群落(这是一个复杂的复合行为,由3种简单行为组成:分离、内聚、排队)。
 2.2 Vector2D类:详见Vector2D.as
 2.3 Vehicle类:详见Vehicle.as TestVehicle.as是对该类的测试。
 2.4 SteeredVehicle类:详见SteeredVehicle.as

 2.4.1 搜寻行为:详见SteeredVehicle.as SeekTest.as是对该类测试。
 2.4.2 逃避行为:详见SteeredVehicle.as FleeTest.as是对该类测试。对搜寻和逃避的综合利用SeekFleeTest2.as很有意思。
 2.4.3 到达行为:详见SteeredVehicle.as ArriveTest.as是对该类测试。
 2.4.4 追捕行为:详见SteeredVehicle.as PursueTest.as是对该类测试。
 2.4.5 躲避行为:详见SteeredVehicle.as PursueEvadeTest.as是对该类测试。
 2.4.6 漫游行为:详见SteeredVehicle.as WanderTest.as是对该类测试。
 2.4.7 对象规避:详见SteeredVehicle.as AvoidTest.as是对该类测试。
 2.4.8 路径追随:详见SteeredVehicle.as PathTest.as是对该类测试。

 2.5 群落: 详见SteeredVehicle.as FlockTest.as是对该类测试。

 第三章 等角投影

 3.1 等角投影与二等角投影:真正的游戏中使用的是二等角投影。因为二等角投影的两个对角线的比例为2:1。
 3.2 创建等角图形:
 3.3 等角变换:

 3.3.1 世界坐标变换为屏幕坐标:
 3.3.2 屏幕坐标转换为世界坐标:
 3.3.3 IsoUtils类:详见IsoUtils.as 和IsoTransformTest.as文件。

 3.4 等角对象:详见IsoObject.as DrawnIsoTile.as DrawnIsoBox.as TileTest.as BoxTest.as DepthTest.as DepthTest2.as文件。
 3.5 等角世界类:详见IsoWorld.as WorldTest.as 类。
 3.6 3D中的移动:详见MotionTest.as MotionTest2.as类。
 3.8 碰撞检测:详见CollisionTest.as类。
 3.9 使用外部图形:详见GraphicTile.as GraphicTest.as类。
 3.10 等角区块图:详见MapLoader.as MapTest.as类。

 第四章 寻路

 4.1 寻路基础:
 4.2 A*:详见AStar.as类。算法描述如下:

 (1).将起始节点添加到待查列表。
 (2).主搜索循环:

  (a).寻找待查列表中有最小代价的节点,设为当前节点。
  (b).如果当前节点就是终止节点,则完成。转向步骤4。
  (c).检查各个相邻节点(在一个矩形网格中,将有8个相邻节点)。对于每个相邻节点:

   (i).如果该节点不可通过,或者已经在待查列表或已查列表中,则将其跳过,继续处理下一个相邻节点,否则继续;
   (ii).计算代价;
   (iii).将当前节点设置为其父节点;
   (iv).把它添加到待查列表中。

  (d).将当前节点添加到已查列表中。
  (e).如果当前待查列表为空,则路径不通,直接返回。否则跳转到(a)。

 (3).针对更新后的待查列表重复执行步骤2。
 (4).已经到达终止节点。创建一个路径列表,并把终止节点添加到该列表。
 (5).将终止节点的父节点添加到路径列表。
 (6).将该节点的父节点添加到路径列表。重复这个过程直至到达起始节点。路径列表现在包含从起点到终点路径的所有节点。

 4.3 实现AStar类:详见GridView.as PathFinding.as类。
 4.4 在游戏中使用AStar:详见Game.as类。
 4.5 高级地形:

 第五章 其他输入方式:摄像头和麦克风

 5.1 摄像头和麦克风:
 5.2 声音作为输入:Microphone类是Flash中的麦克风输入类。
 5.3 视频作为输入:

 第六章 高级物理:数值积分

 6.1 数值积分以及为什么欧拉积分“不好”:欧拉积分的做法是把误差忽略掉。
 6.2 龙格-库塔积分:龙格-库塔积分虽然比欧拉积分更准确,但也只是模拟,并不精确。龙格-库塔积分这里简称为RK。RK主要有两种:龙格-库塔二阶积分(简称RK2)和龙格-库塔四阶积分(简称RK4),这里的数字表示中间采样的次数。
 (1).RK2:其策略是计算物体在当前状态下的加速度、速度和位置(基本欧拉积分),然后计算应用了所计算加速度和速度之后的状态,对二者取平均,再应用该结果得到物体的状态。换句话说,欧拉积分的做法是试图根据一个点猜测出一段时间的全部速度,而RK2则是取这个时间段起点和终点的速度,对二者取平均值来估计这段时间的速度。
 (1).RK4:根据时间段内的4个采样平均得出曲线的曲度。比RK2更加准确。

 6.2.1 基于时间的运动:代码见Euler.as文件,这里是基于时间的欧拉积分的代码实现。
 6.2.2 编写龙格-库塔二阶积分(RK2)代码:代码见RK2.as文件。
 6.2.3 编写龙格-库塔四阶积分(RK4)代码:代码见RK4.as文件。
 6.2.4 薄弱环节:上面实例中模仿的弹力是有问题。
 6.2.5 龙格-库塔小结:

 6.3 Verlet积分:Verlet积分的关键特性之一在于:它不会显式地存储一个对象的速度,实际上只会存储对象的上一个位置。这样一来,需要知道对象的速度时,只需将其当前位置减去上一个位置。因此,每次移动一个对象时,也就是在改变它的速度。只需改变对象的位置就可以影响速度。

 6.3.1 Verlet点:详见VerletPoint.as VerletPointTest.as类文件。
 6.3.2 Verlet线段:详见VerletStick.as VerletStickTest.as类文件。
 6.3.3 Verlet结构:详见Triangle.as Square.as 类文件。
 6.3.4 关节:详见Hinge.as 类文件。
 6.3.5 进一步深入:

 6.4 小结:

 第七章  Flash 10中的3D

 7.1 Flash 10 3D基础:详见Test3D.as类文件。
 7.2 3D定位:详见Position3D.as类文件。

 7.2.1 深度排序:详见DepthSort.as类文件。
 7.2.2 3D容器:详见Container3D.as类文件。

7.3 3D旋转:详见RotateAndPosition.as Carousel.as类文件。
7.4 视场与焦距:详见Carousel.as类文件。
7.5 屏幕和3D坐标:详见LocalGlobal.as类文件。
7.6 指向:详见FollowMouse3D.as类文件。

第八章 Flash 10绘图API

8.1 路径:

 8.1.1 一个简单的绘图程序:详见PathSketch.as类文件。
 8.1.2 绘制曲线:详见CurveDrawing.as类文件。
 8.1.3 Wide绘制命令和NO_OP:GraphicsPathCommand.WIDE_LINE_TO会跳过数据向量中的下一对数。GraphicsPathCommand.NO_OP命令什么也不做。
 8.1.4 环绕:

8.2 三角形:

 8.2.1 位图填充与三角形:详见BitmapTriangles.as BitmapTrianglesUV1.as BitmapTrianglesUV2.as BitmapTrianglesUV3.as类文件。
 8.2.2 三角形与3D:详见ImageTube.as ImagePshere.as类文件。

8.3 图形数据:详见HistoryDraw.as 类文件。

第九章 Pixel Bender

9.1 什么是Pixel Bender:
9.2 编写一个Pixel Shader:
9.3 数据类型:
9.4 获得当前像素坐标:
9.5 参数:
9.6 输入图像采样:
9.7 Flash的旋转Shader:
9.8 在Flash中使用Pixel Bender Shader:
9.9 使用Shader作为滤镜:
9.10 使用Shader作为混合模式:

第十章 补间引擎

10.1 Flash Tween类:详见FlashTween.as类文件。

 10.1.1 缓动函数:缓动类在fl.transitions.easing包中,每个类有三个函数easeIn、easeOut和easeInOut,有如下缓动函数:

  (1).Back:到达目标后会在目标附近左右摆动。
  (2).Bounce:到达目标后会反弹。
  (3).Elastic:像弹簧一样启动,像弹簧一样停止。
  (4).None:没有效果。
  (5).Regular:普通效果。
  (6).Strong:缓慢启动,缓慢停止。

 10.1.2 结合补间:

  (1).并行补间:同时发生的多个补间成为并行补间。详见FlashTween.as类文件。
  (2).补间序列:一个接一个连续发生的补间称为补间序列。

10.2 Flex Tween类:
10.3 补间引擎:
10.4 Tweener:
10.5 TweenLite/TweenGroup:
10.6 KitchenSync:
10.7 gTween:

代码在这里:https://files.cnblogs.com/kiven-code/Flash.ActionScript.3.0%E5%8A%A8%E7%94%BB%E9%AB%98%E7%BA%A7%E6%95%99%E7%A8%8B%E4%BB%A3%E7%A0%81.rar

posted @ 2012-10-24 21:40  kiven.li  阅读(561)  评论(0编辑  收藏  举报