Pygame滚动地图高级

时间:2014-06-21 09:34:01

标签: python camera pygame

我在流氓中工作,我设法在播放器上实现相机,相机只显示玩家周围环境,并固定在窗户的一侧。

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

game camera

如何使相机快速拍摄?在一边,不要再往前走了?

绘制地图

  • 我采用了Camera Rect位置[topleft and bottomright];
  • 将其转换为世界位置;
  • 使用枚举器迭代它;
  • 是否有任何点燃/访问过的FOG与X和Y的关系;
  • 使用点查员在屏幕上显示' 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这个例子,但我无法将代码调整到我的游戏中,因为它使用了精灵。

1 个答案:

答案 0 :(得分: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