【问题标题】:How to maintain camera position while zooming out?缩小时如何保持相机位置?
【发布时间】:2011-08-18 01:46:58
【问题描述】:

我有一个装满瓷砖和其他资产的容器,用作地图。在那个容器的顶部是一个面具,作为玩家看到的相机。为了移动相机,我移动了容器。

我可以使用以下公式将容器内的磁贴居中:

container.x = ( ( (tile.x + (tile.width / 2) ) * container.scaleX) * -1) + (mask_width / 2);
container.y = ( ( (tile.y + (tile.height / 2) ) * container.scaleY) * -1) + (mask_height / 2);

这会将容器移动到相对于遮罩的位置,这样遮罩的中心将是相关的图块。

我最近添加了缩放功能,它只是调整容器的 scaleX/scaleY 以使其更大或更小。我已经修复了上面的居中代码来解决它,但是我在制作它时遇到了麻烦,因此“相机”似乎不会随着视图的缩小而移动。基本上,当缩小时,一切似乎都向左移动,因为容器缩小了。一旦我以上面的代码为中心,一切都很好,但是我需要一种方法来根据 scaleX 和 scaleY 的差异将容器向右移动一点,以使所有东西在缩放时看起来都在相同的位置。我已经尝试了一些东西,但我无法完全理解它的数学原理。

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

    注释掉这段代码

    container.x = ( ( (tile.x + (tile.width / 2) ) * container.scaleX) * -1) + (mask_width / 2);
    container.y = ( ( (tile.y + (tile.height / 2) ) * container.scaleY) * -1) + (mask_height / 2);
    

    在加载时执行此代码

    cam.x = container.width/2
    cam.y = container.height/2
    

    在调整大小/缩放时做这样的事情

    container.x =  container.x + amountOfWidthChanged/2
    container.y = container.y + amountOfHeightChanged/2
    

    【讨论】:

    • 呃,面具与其说是相机,不如说是防止玩家看到容器移动的视点。它不能移动,因为 flash 从 0,0 渲染到它的高度/宽度,所以容器会移动。无论如何,我尝试根据缩放时的高度/宽度差异进行调整,但这太过分了。即使除以 2 或 4 也会导致它向右平移。
    • 您不移动遮罩,而是移动相机容器。面具只是你透过的“窗口”。同样,如果您将注册点从 0,0 偏移到 container.width/2,container.height/2 用于凸轮,则缩放将居中。我发布的其余代码是为了帮助以面具为中心,但这是额外的。
    • 如果这不起作用,那么您描述的布局不是这样。
    【解决方案2】:

    通过对各种 as3 辅助类进行一些研究,我设法自己解决了这个问题。所以在这里希望其他有这个问题的人在这里绊倒:

    movieclip.transform.matrix 允许您在更改 scaleX/Y 时更改它的缩放点。 MatrixTransformer 包含一个函数,可让您将两个点匹配在一起作为注册点。这是我使用的代码:

    var mat:Matrix = container.transform.matrix.clone();
    var externalCenter:Point = new Point(stage.mouseX, stage.mouseY);
    var internalCenter:Point = new Point(container.mouseX, container.mouseY);
    
    // container.scaleX and container.scaleY change here
    
    MatrixTransformer.matchInternalPointWithExternal(matrix, internalCenter, externalCenter);
    roomContainer.transform.matrix = matrix;
    

    【讨论】:

      猜你喜欢
      • 2017-03-28
      • 2023-03-23
      • 1970-01-01
      • 2021-12-09
      • 2013-05-13
      • 2014-08-19
      • 2018-11-12
      • 1970-01-01
      • 2021-10-19
      相关资源
      最近更新 更多