代码之家  ›  专栏  ›  技术社区  ›  michael

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

  •  1
  • michael  · 技术社区  · 16 年前

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

    层向左移动的距离基于其深度变量的值。。。

    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 回复  |  直到 16 年前
        1
  •  0
  •   HanClinto    16 年前

    相机深度应与图层相关,即fCameraDepth-fTargetDepth。

    建立将摄影机位置链接到对象位置的方程式。然后用代数方法把方程倒过来。我猜这会涉及到阿坦。

    对于一个更简单的实现,我可能建议深度只是一个介于0和1之间的变量。0处的对象距离无限远,1处的对象位于摄影机的深度。这样做将导致更简单的数学计算,不涉及切线或反正切。

    推荐文章