【问题标题】:Camera Following Algorithm相机跟随算法
【发布时间】:2012-11-14 20:13:02
【问题描述】:

我正在制作一个游戏,我正在寻求一些关于基本相机跟随算法的帮助。

  • 假设我们有一个大小为 320 x 480 的窗口。
  • 我们还有 坐标为 x,y 的玩家。
  • 用户可以使用 箭头键。
  • 摄像头跟随玩家坐标。 [相机坐标是屏幕所在的位置]。所以 camera.x=player.x 和 camera.y=player.y

现在我遇到的问题是:当玩家到达房间的尽头时, 我可以看到房间的“外面”。因此,理想情况下,相机在接近房间尽头时应该停止移动。

我不确定如何有效地解决这个问题,这似乎是游戏中的一个常见功能。任何帮助都会很棒。

我的代码,它不起作用.. 真的,视图随机变得古怪*:

#bi_currentwindow.layout.x = -(top left x corner of window)
#bi_currentwindow.layout.y = -(top left y corner of window)
#bi_bg_size= total room (or world) size

            diff=(object.x-Window.size[0]/2)
            if diff<0:
                bi_currentwindow.layout.x = object.x+diff
            else:
                diff=(object.x+Window.size[0]/2)-bi_bg_size[0]
                if diff<0:
                    bi_currentwindow.layout.x = -object.x+Window.size[0]/2.0
            diff=(object.y-Window.size[1]/2)

            if diff<0:
                bi_currentwindow.layout.y = diff+Window.size[1]/2
            else:
                bi_bg_size=centralVarTransfer.bi_bg_size
                diff=bi_bg_size[1]-(object.y+Window.size[1]/2)

                if diff>0:
                    bi_currentwindow.layout.y = -object.y+Window.size[1]/2.0

【问题讨论】:

    标签: 3d camera


    【解决方案1】:

    每当我做 2D 游戏时,我更喜欢让玩家居中屏幕并移动背景。这允许您执行以下操作:如果我的房间边是 > 或

    但是,如果您有相机并且更喜欢使用该方法: 数学应该很容易。 比如:

    //assuming origin is the center of the object
    if ( camera.xPosition - (camera.width / 2) < room.x - (room.width / 2))
         camera.xPosition  = room.x - (room.width / 2) + (camera.width / 2)
    

    我的代码可能有点偏离(并且仅适用于房间的一侧),但从概念上讲,您正在检查由偏移量修改的相机位置(基于相机宽度或高度)是否大于或小于房间位置由偏移量修改(基于房间宽度或高度)。

    我发现拥有 2 张索引卡并像相机一样移动一张索引卡有助于概念化您尝试编码的边界条件。

    【讨论】:

    • 谢谢,但是你的camera.width是什么意思?
    • 在这种情况下,您的相机宽度就是屏幕宽度。 (320)
    • 其实,我明白你的意思,但是,这有点困难。如果玩家生成在显示“外部”的区域怎么办?
    • 如果您在主更新循环中调用代码,它将在每一帧中检查它。所以,不管怎样,它总是会检查你是否能看到房间外面,并相应地调整房间。我怀疑您遇到了这个问题,因为您只是在响应玩家移动时才这样做。如果不是这种情况,请提供一些示例代码,以便我提供更多帮助。
    • 默认摄像机位置为 [0,0],如果玩家生成在房间的角落,那么摄像机位置将始终为 [0,0]
    猜你喜欢
    • 2012-10-25
    • 2017-08-28
    • 2016-02-24
    • 1970-01-01
    • 2022-10-04
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多