又是一阵子没更新了,一直在考虑关于这个3D的问题。
自从CS4版本的FLASH出来过后增加了许多类,诸如现在要介绍的3D类,和之前发的3D基础的思想是一样的。但是我想单独提出来。看完后肯定会觉得是相当有必要的。
(以下就不再重复CS4版本作为环境了)
基本
scale = fl / (fl + zpos);
sprite.scaleX = sprite.scaleY = scale;
sprite.alpha = scale; //
sprite.x = vanishingPointX + xpos * scale;
sprite.y = vanishingPointY + ypos * scale;
Z
//
objectArray.sortOn("zpos", Array.DESCENDING | Array.NUMERIC);
for(var i:uint = 0; i < numObjects; i++) {
}
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;
dist = Math.sqrt(dx * dx + dy * dy + dz * dz);
看着相当的麻烦吧,是不是觉得如果有个Z柱属性是多么的有必要。现在的确增加了这个属性。
上面所述的
scale = fl / (fl + zpos);
sprite.scaleX = sprite.scaleY = scale;
sprite.alpha = scale; //
其实相当于现在Z,
用法和X,Y一样,比如sprite.z=100;
回顾下坐标表示:
图 15-2
经过测试 这里的Z坐标是用了右手坐标系,也就是向内是+Z,向外是-Z,不算太抽象吧?
用之前转发的透视效果来修改下:
package {
}
这里的ball可以换成其他什么元件都可以。其实就是把Z柱表示那两段替换成了Z,这样省了不少代码量。
之前转发的里面有一个fl的量,这里可以直接看成是z的0点到-z的一段距离。也可以设置成一个常数,习惯上就设置成250,但是是用的右手坐标系所以fl=-250。这个变量任然可以充当一个物体可见的值,小于这个变量的时候物体就不可见了。这样显得更真实些吧。
比如加在上面那段代码上:
private function onEnterFrame(event:Event):void {
}
这样超出屏幕的时候就消失了。
大家可以在Z柱上加上加速度,或者设置个范围作反弹之类的练习看看效果。
在前面十五章里面也有很多例子,可以稍加修改就能把Z利用起来。
而Z柱的排序的问题也可以通过数组来记录,因为有了具体的值更容易控制排序了。
现在不仅增加了Z坐标,更增加了坐标的旋转一属性,帮助下只说了下rotationX,rotationY,
存储此关键帧的 rotationX
属性。此属性是目标对象相对于其原始方向围绕 x 轴的旋转角度。
存储此关键帧的 rotationY
属性。此属性是目标对象相对于其原始方向围绕 y 轴的旋转角度。
其实Z柱也有这个属性rotationZ,用法也和坐标Z是一样的。
例如:sprite.rotationZ=30;
现在暂时想的就这么多了以后有问题再继续补充吧~~
(如果要转载请注明出处http://blog.sina.com.cn/jooi,谢谢)