1

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

  • 假设我们有一个大小为 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
4

1 回答 1

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 张索引卡并像相机一样移动一张索引卡有助于概念化您尝试编码的边界条件。

于 2012-11-14T20:47:07.787 回答