尝试在Flash AS3中创建视差效果

时间:2009-12-15 17:03:36

标签: flash actionscript-3 math actionscript

我正在使用深度值向舞台添加“图层”对象。

然后我创建了自己的相机类。当我告诉相机向右移动时,我实际上在做的是告诉每个图层对象向左移动。

图层向左移动的距离取决于其深度变量的值...

var fCameraDepth = 1;
var fTan:Number = Math.tan( fCameraMovement / fCameraDepth );
oLayer.x += fTan * fLayerDepth

这很好用,给我一个非常好的视差效果。我遇到的问题是,我希望能够告诉相机在任何图层上查看影片剪辑,但我无法弄清楚如何将影片剪辑坐标转换为相机深度。

我正在尝试这样的事情......

var fCameraDepth = 1;
var fCameraPosition:Number = oCamera.x;

// the layer will have a + or - x val compared to the camera so we 
// need to take that into account when getting the targets position
var fTargetPosition:Number = oActor.x + oActor.getLayer().x;
var fTargetDepth:Number = oActor.getLayer().getDepth();

var fTan:Number = Math.tan( fTargetPosition / fTargetDepth );

var fTargetPositionAdjusted:Number = fTan * fCameraDepth;

oCamera.x = fTargetPositionAdjusted;

但相机只是在某个地方徘徊(没有靠近电影剪辑的地方)

有人能解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

相机深度应相对于图层 - I.E.,fCameraDepth - fTargetDepth。

制作将相机位置链接到物体位置的等式。然后用代数方式反转方程。我的猜测是它会涉及atan。

对于更简单的实现,我可能会建议深度只是介于0和1之间的变量.0处的对象距离无限远,1处的对象位于摄像机的深度。这样做会使数学变得更容易,不涉及切线或反正切。