WEB开发网
开发学院图形图像Flash Flash与3D编程探秘(三)- 摄像机(Camera) 阅读

Flash与3D编程探秘(三)- 摄像机(Camera)

 2008-11-12 11:47:19 来源:WEB开发网   
核心提示: 2. 下面我们定义一个摄像机物体,它具有3D空间的x,Flash与3D编程探秘(三)- 摄像机(Camera)(2),y,z,每一次执行函数一开始我们要把摄像机的位置在z方向移动一定的量,如果摄像机离小球很近了的话,并且我们给它一个移动方向和初始的在z方向的移动速度,//setupcame

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;
  }
}

上一页  1 2 3 4 5 6 7  下一页

Tags:Flash 编程 探秘

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接