我正在建立一个像游戏一样的生存恐怖,并希望制作一个非常漂亮的相机系统来赞美机制。部分原因是你能够蹲下并遮住脸。我想要做的相机工作是放大角色以限制播放器的视图。
我目前的MC结构是:
游戏管理员 > Spawner(这是为了玩家和所有敌人) > 播放器
我遇到的问题是缩放GameMaster(这是侧滚动和其他全局游戏效果发生的地方)导致相机的居中根据玩家离0,0的距离而偏移。 / p>
You can see the issue clearly in this video. The red arrows point to the 0,0.
On this stackoverflow question答案说要为所有东西制作一个容器,并将容器0,0置于要放大的目标上方。这对我来说是一个挑战,因为我必须为嵌套4 MC的对象获得正确的坐标。我也不确定那将对我当前的侧滚动相机做什么。
当角色出现问题时,有没有办法在数学上找出偏移量?这似乎是一个可行的选择,因为你不能移动直到你松开蹲下并且相机缩小。
如果没有,容器MC是一个不错的选择还是只是其中一个“你必须做你必须做的事情。”类型情况?
[补充] 我也看到了一些关于变换矩阵的东西。这有用吗?我对他们一无所知,但我认为他们的CPU很重,对整个游戏中普遍存在的机制来说都不是一个好选择。
[已添加2] 此外,我想做一个旋转相机效果,遭受同样的0,0问题。公然表现为玩家和水平围绕一些遥远的枢轴点旋转。
如果变换矩阵可以快速且功能性地将0,0偏移到玩家位置,以便我可以完成所有相机效果和更改。我认为这可能是最好的方式。
----接近结论---- In regards to Vespers answer。那么我能够补间结果变换吗? 如果是这样那么完全回答我的整个问题。如果没有,我不知道如何得到我想要的结果。
答案 0 :(得分:0)
我认为容器是最干净的解决方案。由于它将以播放器为中心,因此旋转和缩放将正常工作。你提到获取嵌套MC的坐标很难,但有一个内置函数可以做到这一点:localToGlobal()
要获得玩家在全球坐标中的位置,只需player.localToGlobal(new Point(0, 0))
即可。这应该以全局坐标返回玩家的中心。如果您的主容器不在全局坐标中(例如,因为它嵌套在另一个转换的MC中),您可以使用容器上的相反函数将全局转换为本地:
container.globalToLocal(player.localToGlobal(new Point(0, 0)))
现在你只需要将容器放在中心位置。这也可以用来模拟相机的运动。如果你在每一帧都更新容器位置,它会在播放器后面提供相机的效果。