Flash与3D编程探秘(七)- 3D物体框架
2008-11-12 11:51:06 来源:WEB开发网这样我们就得到一个数组,包含所有我们需要的2D数据。并不困难,你完全可以把这一段代码叫做这个程序的3D引擎,它负责了所有点的数据在空间里旋转计算和输出。
7. 下面是动画执行的循环函数。需要注意的一点,在以后的文章中我都将使用基于时间的运动。在这里你只要知道下面的公式就可以了:旋转角度=角速度X时间。使用上面的公式,我们递增物体围绕y轴和x轴的旋转角度。然后使用第6步的函数计算所有的3D顶点旋转后的位置并且得到映射后的2D点。剩下你应该能想到, 就是把相应的小P定位到这些定点上,并且对小球进行缩放比率scale_point,最后不要忘记对小P进行z排序。
functionmove(e:Event):void
{
//wellweusetimebasedmovementinthistutorial
varcurrent_time=newDate().getTime(); //sampethecurrenttime
//incrementtherotationaroundyaxis
axis_rotation.y+=0.0008*(current_time-start_time);
//incrementtherotationaroundxaxis
axis_rotation.x+=0.0006*(current_time-start_time);
start_time=current_time; //resetthestarttime
varprojected=project_pts(points); //3dpontsto2dtransformation
//nowwehaveallthedataweneedtopositiontheballs
for(vari=0;i<scene.numChildren;i++) //loopthroughtthescene
{
//positioningtheball
scene.getChildAt(i).x=projected[i].x;
scene.getChildAt(i).y=projected[i].y;
scene.getChildAt(i).z=projected[i].z;
scene.getChildAt(i).scaleX=scene.getChildAt(i).scaleY=projected[i].scale_point;
}
swap_depth(scene); //sortoutthedepth
}
//bubblesortalgo
functionswap_depth(container:Sprite)
{
for(vari=0;i<container.numChildren-1;i++)
{
for(varj=container.numChildren-1;j>0;j--)
{
if(Object(container.getChildAt(j-1)).z<Object(container.getChildAt(j)).z)
{
container.swapChildren(container.getChildAt(j-1),container.getChildAt(j));
}
}
}
}
//nowaddtheeventlistenerandspinthebox
this.addEventListener(Event.ENTER_FRAME,move);
- ››FLASH不等于运算符!=的使用实例
- ››FLASH不全等运算符!==
- ››FLASH字符串分隔符运算符
- ››FLASH% 模运算符
- ››Flash+、++、+= 加法运算符
- ››Flash, 逗号运算符
- ››flash中的-、--、-=减法运算符
- ››Flash的-Infinity 常数、.点运算符、/ 除法运算符...
- ››Flash两种注释方法/*..*/ 和// 注释行分隔符运算符...
- ››Flash的/=除法赋值运算符、=赋值运算符、== 等于运...
- ››Flash之?: 条件运算符、^ 按位 XOR 运算符、^= 按...
- ››Flash的_framesloaded代码示例
更多精彩
赞助商链接