从球形绳的制作学习简单三维
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-13
本教程来自于《Flash MX 2004 游戏开发》(加拿大,Glen Rhodes,电子工业出版社)。 准备:以下三个实例的元件一样,只是代码不同,元件在库中,40×40像素的球体,链接名为:sphere 代码处的解释部分用红色字体表示 A.静态的三维绳制作 效果如下: 点击浏览该文件 过程: 准备好元件,在主场景中第1帧输入代码: d =800; centerX = 275; centerY = 200; ang = 0; for (var i = 0; i<1250; i++) { var nm = "sphere"+i; _root.attachMovie("sphere", nm, i); //我们首先定义了一个名为ang的变量,初始化为0,我们将在余弦波的循环体内使用该变量。 接下来我们创建了1250个小球的MC,实例名分别为:sphere0,sphere1,sphere2,...等等。我们将这些MC添加到_root上,然后将它们深度级别定义为i,小球的深度稍后将会根据它们的Z值进行修改,以准确地反映它们的层次。 接下来: _root[nm].x = Math.cos(ang)*200; ang += 0.2; _root[nm].y = 400; 这就是我们创建余弦波的方法。每个小球的X位置设置为Math.cos(ang)*200,这就意味着X将是介于-200和200之间的某个数值,前后循环变化。同样对每个成功创建的小球的ang加上0.2。 注意变量x和y就是x和y,而不是_x和_y。记住这是三维空间内的虚拟位置,而不是屏幕坐标。 接下来: _root[nm].z = (i*50)+1400; var zfactor=d/_root[nm].z; //第一个小球将在(Z轴上)1400,第二个是1450。。。。,接下来我们计算小球的屏幕位置: _root[nm]._x=_root[nm].x*zfactor+centerX; _root[nm]._y=_root[nm].y*zfactor+centerY; //接下来我们设置小球的比例,使得远的小球显得小些。 _root[nm]._xscale=100*zfactor; _root[nm]._yscale=100*zfactor; //最后 : _root[nm].swapDepths(Math.floor(100000-_root[nm].z)); } //为什么使用swapDepths:这能使得较远的对象看起来在较近的对象之后。我们让具有较高Z值的小于有较低的深度。 如果我们禁用swapDepths函数,就会得到如下: (看上去,远处的小球反而叠在近的小球的上面) 点击浏览该文件 B.移动的球形绳 效果: 点击浏览该文件 准备同A, 第1帧代码: d = 1000; centerX = 275; centerY = 200; ang = 0; function project() { if (this.z<40) { this._visible = false; } 我们在这里执行了一个重要的检测。如果对象的Z值小于40,我们就认为它实际上是在用户的后方,因此我们根本就不必绘制它。想像小球向我们靠近,究竟是在哪一点上让我们注意 到小球的通过,而后到达我们的后侧而无法看到的呢?在我们的示例中,似乎40是较好的Z值。不要用“if(this.z<40)”,因为当某个小球的Z值达到0时,它是那么无限地接近观察者,看起来似乎无穷大。在Z值为40的位置,小球看上去相当大且距离相当近,因此可以认为这就是小球通过我们的点。 接下来: else { this._visible = true; var zfactor = d/this.z; 等价于:this.z>0时我们让小球可见(小球不在我们的后方) this._x = this.x*zfactor+centerX; this._y = this.y*zfactor+centerY; this._xscale = 100*zfactor; this._yscale = 100*zfactor; this.swapDepths(Math.floor(100000-this.z)); } } for (var i = 0; i<40; i++) { var nm = "sphere"+i; _root.attachMovie("sphere", nm, i); _root[nm].x = Math.cos(ang)*200; ang += 0.2; _root[nm].y = 400; _root[nm].z = (i*50)+d; _root[nm].project = project; //将project函数添加到小球MC内名为project的方法之下。接下来,只要通过调用sphere.project()方法,即可以让小球改变自身位置、缩放比例和图层。 _root[nm].onEnterFrame = function() { this.y-=3; this.project(); }; } //这就是我们将对象改变为动态的地方,首先 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: AS2数组使用小结下一篇: 动态文本与输入文本互相切换
关于从球形绳的制作学习简单三维的所有评论