python - Pygame 滚动 map 进阶

标签 python camera pygame

我在玩 rogue-like,我设法在玩家身上实现了一个摄像头,摄像头只显示玩家周围的环境,并且固定在 window 的一侧。

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

game camera

如何让相机“捕捉”到一边并且不再移动?

绘制 map

  • 我占据了 Camera Rect 位置 [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这方面的一个例子,但我无法使代码适应我的游戏,因为它使用了 Sprite 。

最佳答案

我猜你的相机对象没有以任何方式绑定(bind)到玩家。

将相机停在角落是没有问题的。您可以用一个大矩形代表世界地图,然后调用 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

关于python - Pygame 滚动 map 进阶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24340285/

相关文章:

SurfaceView 中的 Android 相机预览

java - Android -- Google+ 即时上传如何工作?

python - 我怎样才能让列表中的每一项都有延迟?

python - 在 Python Polars 中获取每个 groupby/apply 的相关性

python - 如何替换 Pandas 数据框中列的选定行的值?

python - Canvas 中的框架不会扩展以适应 Canvas

iOS 7 相机连拍模式

python - 无法运行 2 人 Python 游戏

python - pygame.display.update() 导致周期性滞后峰值

Python 函数通过引用调用