pstatus"> 本帖最后由 lut_456 于 2013-5-2 16:00 编辑
注意
尝试把上面例子中小球之间的x距离变小,看看有什么变化?这时会发现,不管小球离我们多远,右边的小球始终在最上面。即使中间的小球应该盖过右边小球的时候,右边的小球还会在上面。这是因为在把小球添加到舞台上的时候,已经给了小球层次,也就是说最后添加的小球(右边的小球)就在最上面。
小球3D空间(无层次)位置不对了!
看起来应该设计一种方法实现小球的层次感,当小球离我们远的时候,那么它的层次就比较靠后,以此类推。换句话说,需要利用小球的z值给小球们分开层次,这也是即将要做的。在下面这个例子中,我们使用7个小球的运动来说明是如何实现层次的。
小球3D空间(有层次)好多了!
动画制作步骤1. 和上次的例子一样,重复6个步骤。不同的是初始化7个小球,并且把它们的x距离缩短。 - for (var i = 0; i < 7; i++)
- {
- var sphere = new Sphere();
- sphere.x_3d = -150+i*40;
- sphere.y_3d = 80;
- sphere.z_3d = Math.random()*(0-600)+600;
- sphere.direction = 1;
- sphere.speed = Math.random()*(5-12)+12;
- scene.addChild(sphere);
- }
复制代码2. 利用Bubble Sort算法,在每一次对小球x,y和大小设置后,对所有的小球在舞台上的层次进行操作。这里使用的理论是最小的z值的小球,它所在层次就应该在最上面。不要小看我写的这短短几行代码哦!它可以把所有的小球分配到相应的层次!只要你的CPU够块,不管多少小球都可以。 - function swap_depth(container:Sprite)
- {
- for (var i = 0; i < container.numChildren - 1; i++)
- {
- for (var j = container.numChildren - 1; j > 0; j--)
- {
- if (Object(container.getChildAt(j-1)).z_3d < Object(container.getChildAt(j)).z_3d)
- {
- container.swapChildren(container.getChildAt(j-1), container.getChildAt(j));
- }
- }
- }
- }
复制代码3. 然后在循环函数里的最后加上 本文章旨在讨论如何在Flash中实现3D动画,对于一些算法,比如这一节中使用到的冒泡排序算法,当然你可以选择使用Merge Sort等O(nlogn)算法以提高效率。你可以完全拷贝我写的代码去使用,但是请务必注明出处。如果是排序的话,google或者百度一下,我相信你会找到更详细的说明文字来解释冒泡排序。
一个简单Particle System例子这是一个使用缩放的基本概念的例子,可以使用键盘上下左右键移动你的观看位置,按下W键加速前进,按下S键减速。由于涉及到摄像机,在这篇文章中就不再讲解。源文件在本文的下载中可以找到,你可以尝试改变星星的数量,星星很多的话,移动摄像机,应该会看到一个很长的星带(题外话:在我的电脑里运行2000个 星星就有些慢了,Dual Core 2.0GHZ,如果你有更强大的CPU的话,那你看到星空要比我的漂亮的多)。
3D星空,简单的Particle System,WASD移动观看位置,K键加速,L键减速
OK,你已经学会了如果使用缩放和一些简单的设置产生3D效果的动画。在后面的几篇中,我们会逐渐深入探讨更有趣的内容。加油!
|