向 Lee Brimelow 致敬,下面的这个例子来自他的博客,原文地址: http://theflashblog.com/?cat=13&paged=2
代码如下,需要用到pv3d 1.5 版的库文件。将代码放在场景中,库中放置图片,类名称设为 dzxz .
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
// Create the container sprite 创建容器对象
var con:Sprite = new Sprite();
con.x = stage.stageWidth * 0.5;
con.y = stage.stageHeight * 0.5;
addChild(con);
// Setup the scene 设置场景
var scene:Scene3D = new Scene3D(con);
var cam:Camera3D = new Camera3D();
cam.zoom = 4;
// Create camera center 设置相机(视角)
var pc:Plane = new Plane();
pc.visible = false;
cam.target = pc;
// Spiral properties 螺旋形状的参数
var num:int = 100; //图片的总数
var numOfRotations:Number = 5; //旋转的步长
var anglePer:Number = ((Math.PI*2) * numOfRotations) / num; //每一张图片的角度差
var yPos:Number = 0; //垂直方向上的间隔
// Create the planes
var pa:Array = new Array();
for(var i:uint=0; i<num ; i++)
{
var cm:BitmapAssetMaterial = new BitmapAssetMaterial("dzxz"); //载入库中的一张图片
cm.oneSide = false; //双面可见
var p:Plane = new Plane(cm, 100, 100);
p.x = Math.cos(i * anglePer) * 550; //在x z 轴构成的平面上以圆形分布
p.z = Math.sin(i * anglePer) * 550; //
p.y = yPos += 50; //y 方向上的间隔
p.rotationY = (-i*anglePer) * (180/Math.PI) + 270;
scene.addChild(p);
}
// Create the render loop
addEventListener(Event.ENTER_FRAME, render);
var angle:Number = 0;
function render(e:Event):void
{
var dist:Number = ((stage.mouseY) - stage.stageHeight * 0.5) * -0.1;
var dist2:Number = ((stage.mouseX) - stage.stageWidth * 0.5) * 0.0005;
angle += dist2; //相机的旋转角度
cam.x = Math.cos(angle) * 1000;
cam.z = Math.sin(angle) * 1000;
cam.y += dist; //相机上下移动
if(cam.y <369) cam.y = 369; //下边界
if(cam.y> 4755) cam.y = 4755; //上边界
pc.y = cam.y; //视角和相机一样,同步提升
scene.renderCamera(cam);
}
该段代码首先让图片在空间进行分布,然后让相机根据鼠标位置进行旋转和上下移动,代码简洁明快,给人一种平实的感觉。
回复Comments
作者:
{commentrecontent}