Flash与3D编程探秘(三)- 摄像机(Camera)
2008-11-12 11:47:19 来源:WEB开发网2. 下面我们定义一个摄像机物体,它具有3D空间的x,y,z,并且我们给它一个移动方向和初始的在z方向的移动速度。
//setupcamera
varcamera=newObject();
camera.x=0;
camera.y=0;
camera.z=0;
camera.direction=1;
camera.speed_z=6;
3. 创建一个小球在舞台上。
//createasphere
//gotolibrary,rightclickonSphere,chooselinkage
//andcheckExportforActionscript
for(vari=0;i<1;i++)
{
varsphere=newSphere();
sphere.x_3d=-30;
sphere.y_3d=80;
sphere.z_3d=600;
//addallthesphereestothesceneobject
scene.addChild(sphere);
}
4. 接下来我们开始写运动的循环函数。每一次执行函数一开始我们要把摄像机的位置在z方向移动一定的量。如果摄像机离小球很近了的话,那么让摄像机回来。
//movethesphereesbackandforth
functionrun(e:Event)
{
//hereweoffsetthecamerapositionbyitsmovingspeedtimesthedirection
camera.z+=camera.speed_z*camera.direction;
if(camera.z>600) //ifthecameraistooclosetotheball
{
camera.z=600;
camera.direction=-1; //movecamerabackward
}
elseif(camera.z<0) //ifthecameraistooclosetothescreen
{
camera.z=0;
camera.direction=1;
}
//loopthroughalltheobjectsonthescene
for(vari=0;i<scene.numChildren;i++)
{
//calculatethescalewhattheobjectshouldbe
varscale=focal_length/(focal_length+scene.getChildAt(i).z_3d-camera.z);
scene.getChildAt(i).x=(scene.getChildAt(i).x_3d-camera.x)*scale;
scene.getChildAt(i).y=(scene.getChildAt(i).y_3d-camera.x)*scale;
//properlyscaletheobjecttolook3d
scene.getChildAt(i).scaleX=scene.getChildAt(i).scaleY=scale;
}
}
- ››FLASH不等于运算符!=的使用实例
- ››FLASH不全等运算符!==
- ››FLASH字符串分隔符运算符
- ››FLASH% 模运算符
- ››Flash+、++、+= 加法运算符
- ››Flash, 逗号运算符
- ››flash中的-、--、-=减法运算符
- ››Flash的-Infinity 常数、.点运算符、/ 除法运算符...
- ››Flash两种注释方法/*..*/ 和// 注释行分隔符运算符...
- ››Flash的/=除法赋值运算符、=赋值运算符、== 等于运...
- ››Flash之?: 条件运算符、^ 按位 XOR 运算符、^= 按...
- ››Flash的_framesloaded代码示例
更多精彩
赞助商链接