纳金网

标题: Flash与3D空间(三) [打印本页]

作者: lut_456    时间: 2013-5-2 15:52
标题: Flash与3D空间(三)
本帖最后由 lut_456 于 2013-5-2 16:00 编辑

注意

尝试把上面例子中小球之间的x距离变小,看看有什么变化?这时会发现,不管小球离我们多远,右边的小球始终在最上面。即使中间的小球应该盖过右边小球的时候,右边的小球还会在上面。这是因为在把小球添加到舞台上的时候,已经给了小球层次,也就是说最后添加的小球(右边的小球)就在最上面。



http://www1bpt.bridgeport.edu/%7Ezhouyang/files/flash/tutorial1_zoom_nodepth_chaos.swf

小球3D空间(无层次)位置不对了!


看起来应该设计一种方法实现小球的层次感,当小球离我们远的时候,那么它的层次就比较靠后,以此类推。换句话说,需要利用小球的z值给小球们分开层次,这也是即将要做的。在下面这个例子中,我们使用7个小球的运动来说明是如何实现层次的。


http://www1bpt.bridgeport.edu/%7Ezhouyang/files/flash/tutorial1_zoom_advanced.swf

小球3D空间(有层次)好多了!


动画制作步骤

1. 和上次的例子一样,重复6个步骤。不同的是初始化7个小球,并且把它们的x距离缩短。

  1. for (var i = 0; i < 7; i++)
  2. {
  3.    var sphere = new Sphere();
  4.     sphere.x_3d = -150+i*40;
  5.     sphere.y_3d = 80;
  6.    sphere.z_3d = Math.random()*(0-600)+600;
  7.     sphere.direction = 1;
  8.     sphere.speed = Math.random()*(5-12)+12;
  9.     scene.addChild(sphere);
  10. }
复制代码

2. 利用Bubble Sort算法,在每一次对小球x,y和大小设置后,对所有的小球在舞台上的层次进行操作。这里使用的理论是最小的z值的小球,它所在层次就应该在最上面。不要小看我写的这短短几行代码哦!它可以把所有的小球分配到相应的层次!只要你的CPU够块,不管多少小球都可以。

  1. function swap_depth(container:Sprite)
  2. {
  3.     for (var i = 0; i < container.numChildren - 1; i++)
  4.    {
  5.         for (var j = container.numChildren - 1; j > 0; j--)
  6.         {
  7.             if (Object(container.getChildAt(j-1)).z_3d < Object(container.getChildAt(j)).z_3d)
  8.             {
  9.                 container.swapChildren(container.getChildAt(j-1), container.getChildAt(j));
  10.             }
  11.         }
  12.     }
  13. }
复制代码

3. 然后在循环函数里的最后加上

  1. swap_depth(scene);
复制代码

本文章旨在讨论如何在Flash中实现3D动画,对于一些算法,比如这一节中使用到的冒泡排序算法,当然你可以选择使用Merge Sort等O(nlogn)算法以提高效率。你可以完全拷贝我写的代码去使用,但是请务必注明出处。如果是排序的话,google或者百度一下,我相信你会找到更详细的说明文字来解释冒泡排序。


一个简单Particle System例子

这是一个使用缩放的基本概念的例子,可以使用键盘上下左右键移动你的观看位置,按下W键加速前进,按下S键减速。由于涉及到摄像机,在这篇文章中就不再讲解。源文件在本文的下载中可以找到,你可以尝试改变星星的数量,星星很多的话,移动摄像机,应该会看到一个很长的星带(题外话:在我的电脑里运行2000个 星星就有些慢了,Dual Core 2.0GHZ,如果你有更强大的CPU的话,那你看到星空要比我的漂亮的多)。

http://www1bpt.bridgeport.edu/~zhouyang/files/flash/tutorial3_camera_particles.swf

3D星空,简单的Particle System,WASD移动观看位置,K键加速,L键减速



OK,你已经学会了如果使用缩放和一些简单的设置产生3D效果的动画。在后面的几篇中,我们会逐渐深入探讨更有趣的内容。加油!



作者: njwqz    时间: 2013-7-15 08:59
楼主求后面几篇啊




欢迎光临 纳金网 (http://old.narkii.com/club/) Powered by Discuz! X2.5