1

我正在构建一个类似生存恐怖的游戏,并希望制作一个非常好的相机系统来补充机制。部分原因是您将能够蹲下并遮住脸。我想要做的相机工作是放大角色以限制玩家的视野。

我目前拥有的 MC 结构是:

GameMaster > Spawner(这是给玩家和所有敌人的)> Player

我遇到的问题是缩放 GameMaster(这是发生横向滚动和其他全局游戏效果的地方)会导致相机的中心根据玩家与 0,0 的距离而偏移。

您可以在此视频中清楚地看到问题。红色箭头指向 0,0。

在这个 stackoverflow 问题上,答案说要为所有东西制作一个容器,并将容器 0,0 居中在您想要放大的目标上。这对我来说是一个挑战,因为我必须为嵌套 4 个 MC 的对象获取正确的坐标。我也不确定这会对我当前的侧滚动相机做什么。

有没有一种方法可以让我在数学上计算出角色闪避时的偏移量?这似乎是一个可行的选择,因为在您松开蹲伏并且相机缩小之前您无法移动。

如果不是,容器 MC 是一个不错的选择,还是只是其中之一“你必须做你必须做的事”。类型的情况?

[添加] 我还看到了一些关于变换矩阵之类的东西。那是可行的吗?我对它们一无所知,但我认为它们的 CPU 很重,对于整个游戏中普遍存在的机制来说,这不是一个好的选择。

[添加 2] 另外,我想做一个旋转相机效果,它会遇到同样的 0,0 问题。公然显示为玩家和关卡围绕某个远离枢轴点旋转。

如果 Transform Matrix 可以快速且功能性地将 0,0 偏移到玩家位置,那么我就可以完成所有相机效果和更改。我认为这可能是最好的方法。

----接近结论---- 关于晚祷的回答。然后我可以对生成的转换进行补间吗?如果是这样,那么这完全解决了我的整个问题。如果没有,我不知道如何得到我想要的结果。

4

1 回答 1

0

我认为容器是最干净的解决方案。由于它将以玩家为中心,因此旋转和缩放将正常工作。您提到获取嵌套 MC 的坐标很困难,但是有一个内置函数可以做到这一点:localToGlobal()

要获取全局坐标中的玩家位置,只需执行player.localToGlobal(new Point(0, 0)). 这应该以全局坐标返回玩家的中心。如果您的主容器不在全局坐标中(例如,因为它嵌套在另一个转换后的 MC 中),您可以使用容器上的相反函数从全局坐标转换为局部坐标:

container.globalToLocal(player.localToGlobal(new Point(0, 0)))

现在您只需将容器居中即可。这也可以用来模拟相机的运动。如果您在每一帧更新容器位置,它将给出摄像机跟随播放器的效果。

于 2012-11-21T17:47:11.383 回答