2009-12-15 55 views
1

我加入“层”的对象的阶段与深度值的视差效应。试图创建在闪光AS3

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

,该层移动到左侧的距离是基于其深度变量的值...

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; 

但相机刚跑开了某个地方(任何地方的影片剪辑附近)

任何人都可以得到他们的头周围呢?

回答

0

相机深度应相对于层 - 即fCameraDepth - fTargetDepth。

请链接摄像头位置物体位置的方程。然后以代数方式反转该等式。我的猜测是它会涉及atan。

对于一个简单的实现,我可能会建议深度是简单的,在0℃和1对象之间的变量是在距离无限远,在1对象在相机的深度。这样做会导致数学更容易,不涉及切线或反正切。