【问题标题】:Pygame Scrolling Map AdvancedPygame 滚动地图高级
【发布时间】:2014-06-21 09:34:01
【问题描述】:

我在玩rogue-like,我已经设法在播放器上实现了一个摄像头,摄像头只显示玩家周围的环境,并且固定在窗户的一侧。

问题是,当玩家靠近地图的两侧时,表面会出现黑色空间。 像这样:

如何让相机“卡”到一边而不进一步?

绘制地图

  • 我采用了相机矩形位置 [topleft 和 bottomright];
  • 将其转换为世界位置;
  • 使用枚举器对其进行迭代;
  • 是否使用 X 和 Y 进行任何点亮/访问 FOG 计算;
  • 并使用枚举器“i”和“j”在屏幕中显示。

代码如下:

topleft = Map.toWorld(camera.rect.topleft)
bottomright = Map.toWorld(camera.rect.bottomright)
for i, x in enumerate(xrange(topleft[0], bottomright[0])):
    for j, y in enumerate(xrange(topleft[1], bottomright[1])):
        tile = mymap.tileAt(x, y)
        object = [obj for obj in Object.OBJECTS if obj.pos == (x,y)]
        if tile:
            lit = field_of_view.lit(x, y)
            visited = field_of_view.visited(x, y)
            graphic = tile.graphic
            if lit:
                color = tile.color
            elif visited:
                color = GRAY
            else:
                color = BLACK
            renderedgraphic = myfont.render(ch, 1, graphic)
            screen.blit(renderedgraphic, Map.toScreen((i + 1, j)))
        if object:
            Draw.drawObject(object[0], Map.toScreen((i + 1, j)))

我整天都在为这个问题苦苦挣扎,这就是我得到的进一步。

我看到了 HERE 的一个例子,但我无法将代码调整到我的游戏中,因为它使用了精灵。

【问题讨论】:

  • 如果您没有得到任何答案,请尝试将其发送到 gamedev.stackexchange.com
  • 话虽如此,解决方案将涉及检查移动相机是否会导致 4 侧中任何一侧的屏幕边缘超出地图边缘,如果出现这种情况则不要移动它是这样的。
  • 我喜欢 pygame,但它有很多问题,我建议你看看 PyOpenGL,PyOpenGL 激活你的 GPU 并且与 pygame 相比快如闪电。使用 PyOpenGL,您可以绘制整个世界,只需根据需要定位相机,无需部分渲染,并且在 2D 中它很简单。 greendalecs.wordpress.com/2012/04/21/… 我知道这不是真正的答案,但从长远来看...PyOpenGL 是最好的。

标签: python camera pygame


【解决方案1】:

我猜你的相机对象并没有以任何方式与玩家绑定。

将相机停在角落是没有问题的。你可以有一个代表世界地图的大矩形,然后调用cameraRect.clamp_ip(mapRect)

真正的问题是让相机回到中心位置。通过上面的简单检查,玩家将停留在相机的角落。

如果您更改相机以跟随播放器,如果可能的话,它会起作用。一点伪代码:

Check if player is not in the center of camera
    Check direction of player movement - if moving towards the center of camera
        do nothing
Else
    Check direction of player movement
    Try to move camera

【讨论】:

    猜你喜欢
    • 2019-11-03
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    相关资源
    最近更新 更多