Laan's steps..

Feed Rss

flash实时3D的基本算法

10.16.2008, flash, flex, by .

可以先看一个房子:http://www.laan.so/?page_id=88

//方向,以向右,向下,向内为正
var vx = vy=vz=0;
//真实空间坐标,计算上相当于以屏幕为基本面而向屏幕内衍生的空间中的坐标
var pz = 0;
var px = 0;
var py = 0;
//转换后坐标,即在屏幕上的显示坐标
var px2 = py2=0;
//坐标原点
var x0 = 200;
var y0 = 200;
//眼睛到屏幕的距离,在计算上相当于坐标转换比例
var d = 10;
//运动速度
var speed = 1;
//键盘控制,调节物体在真实空间的速度
keyctrl = new Object();
keyctrl.onKeyDown = function() {
if (Key.isDown(Key.DOWN)) {
//trace(“down”);
vy = speed;
}
if (Key.isDown(Key.UP)) {
//trace(“up”);
vy = -speed;
}
if (Key.isDown(Key.RIGHT)) {
//trace(“right”);
vx = speed;
}
if (Key.isDown(Key.LEFT)) {
//trace(“left”);
vx = -speed;
}
//按下“A”向内运动,按下“z”向外运动
if (Key.getCode() == 65) {
//trace(“a”);
vz = speed;
}
if (Key.getCode() == 90) {
//trace(“z”);
vz = -speed;
}
movectrl();
};
keyctrl.onKeyUp = function() {
vx = vy=vz=0;
};
Key.addListener(keyctrl);
//坐标转换引擎
function trans() {
px2 = d*px/(d+pz)+x0;
py2 = d*py/(d+pz)+y0;
}
//运动控制
function movectrl() {
//真实空间坐标变化
px = px+vx;
py = py+vy;
pz = pz+vz;
//转换
trans();
//运动表现
point._x = px2;
point._y = py2;
point._xscale = point._yscale=d*100/(d+pz);
}

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>