FLASH_3D教程——从头开始
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-08
plane[1].length-1;//num_nodes_per_plane=4 xz_angle_inc = 0; //下面这4个定义对用鼠标控制旋转的速度有关, yz_angle_inc = 0; angle_inc_factor = .1; angle_dec_factor = .9; o_x = Stage.width/2; //把坐标原点移到屏幕中心 o_y = Stage.height/2; node = new Array(); //定义新数组 p_node = new Array(); //边长调整... 主要是求出8个点,在设定边长,情况下的坐标 for (i=1; i<=num_nodes; i++) { node[i] = new Object(); node[i].x = dx[i]*(cube_width/2); node[i].y = dy[i]*(cube_width/2); node[i].z = dz[i]*(cube_width/2); } for (i=1; i<=num_planes; i++) { //建立6个空白的影片剪辑,主要用于,每天影片剪辑,画一个立方体的面。 _root.createEmptyMovieClip("plane"+i, i); } //版面的调整 下面的_root.onEnterFrame 会调用这里进行画立方体 //对这里不理解的,看附录一的代码! function create_planes() { for (var i = 1; i<=num_planes; i++) { depth = 0; //设定深度初始值 mc = _root["plane"+i]; //每个影片剪辑画一个立方体的一个面 mc.clear(); //清除上次画的面,不用这句语句,可以看到面的连续旋转的会是什么轨迹,程序是怎么画的。不过,很难看。 mc.beginFill(colour, 100); //设置立方体面的颜色,colour可以变数组colour[i],这样每个面可以画,不同的颜色。 mc.lineStyle(3,0xFF0000,100);//设置立方体的棱的颜色 mc.moveTo(p_node[plane[i][1]].x, p_node[plane[i][1]].y);//这里设定每个正方形面,开始画时的启始点。 for (j=num_nodes_per_plane; j>=1; j--) { //这里是连续读取4个点,画好一个正方形 mc.lineTo(p_node[plane[i][j]].x, p_node[plane[i][j]].y); depth += node[plane[i][j]].z; //求每个面上4点旋转后,4个点的深度变化,并相加 } depth /= -num_nodes_per_plane;//注意除以负数,这样符合,FLASH的深度变化的远近情况 mc.swapDepths(depth); //有点的深度变化,来控制面的层次变化,如果没有这句,可以看到一个立方体在旋转是6个面的层次混乱。 amount = depth/50*100+15;//用深度变化,在传值,这个参数主要用于下面的语句,下面的语句,用于立方体在旋转时,面的亮度的调整,符合一定的光照效果。 new Color(mc).setTransform({ra:amount, ga:amount, ba:amount}); //这句语句可以查看FLASH_AS语法参考,可以找到的。主要是对色彩的设置。 } } //鼠标激发 _root.onMouseDown = function() { mouse_down = true; }; _root.onMouseUp = function() { mouse_down = false; }; _root.onEnterFrame = function() { if (mouse_down) { //判断,鼠标情况,对鼠标移动距离的相加,如果,没有“+=”而用“=”,这样鼠标每点一次,图象就跳回初始状态。可以自己实验看下效果,进行对比。 xz_angle_inc += (_xmouse-old_mx)*angle_inc_factor; yz_angle_inc += (_ymouse-old_my)*angle_inc_factor; } for (i=1; i<=num_nodes; i++) { sin_xz = Math.sin(xz_angle_inc*trans); //对弧度与角度的转化公式。 cos_xz = Math.cos(xz_angle_inc*trans); sin_yz = Math.sin(yz_angle_inc*trans); cos_yz = Math.cos(yz_angle_inc*trans); rx1 = cos_xz*node[i].x-sin_xz*node[i].z; //这里就是上面的坐标转换公式里的,先按Y轴旋转,再按X轴旋转。 ry1 = node[i].y; rz1 = cos_xz*node[i].z+sin_xz*node[i].x; rx2 = rx1; ry2 = cos_yz*ry1+sin_yz*rz1; rz2 = cos_yz*rz1-sin_yz*ry1; node[i].x = rx2; //这里是把每个旋转后,得到的先的坐标保存在变量里 node[i].y = ry2; node[i].z = rz2; p_ratio = d/(d+node[i].z); //这个是上面d/(d+z) p_node[i] = new Object(); p_node[i].x = o_x+node[i].x*p_ratio; //确定在屏幕上点的位置 p_node[i].y = o_y-node[i].y*p_ratio; } xz_angle_inc *= angle_dec_factor; //这个加速鼠标控制时的旋转速度 yz_angle_inc *= an |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: FLASH8新功能体验-裁切下一篇: Flash绘制精致图表:透明小球
关于FLASH_3D教程——从头开始的所有评论