2

因此,我正在使用 Pygame 在 Python 中制作一个 2d 顶视图游戏。我一直在尝试创建一个让玩家保持在屏幕中央的摄像机运动。我该怎么做?我想将“地图”放在一个单一的表面上,这将被 blit 到屏幕表面。如果这样做,我可以只构建一次地图,然后以某种方式调整它的位置,以便玩家始终保持在屏幕的中心。我的播放器更新它的位置是这样的:

   def update(self, dx=0, dy=0):
        newpos = (self.pos[0] + dx, self.pos[1] + dy)  # Calculates a new position
        entityrect = pygame.Rect(newpos, self.surface.get_size())  # Creates a rect for the player
        collided = False
        for o in self.objects:  # Loops for solid objects in the map
            if o.colliderect(entityrect):
                collided = True
                break

        if not collided:
            # If the player didn't collide, update the position
            self.pos = newpos

        return collided

我找到了这个,但那是针对侧视平台游戏的。所以我的地图看起来像这样:

map1 = pygame.Surface((3000, 3000))
img = pygame.image.load("floor.png")
for x in range(0, 3000, img.get_width()):
    for y in range(0, 3000, img.get_height()):
        map1.blit(img, (x, y))

那么我将如何进行相机移动呢?任何帮助,将不胜感激。

PS。我希望你能明白我在这里问什么,英语不是我的母语。=)

4

1 回答 1

2

好吧,您没有展示如何绘制地图或播放器,但您可以执行以下操作:

camera = [0,0]
...
def update(self, dx=0, dy=0):
    newpos = (self.pos[0] + dx, self.pos[1] + dy)  # Calculates a new position
    entityrect = pygame.Rect(newpos, self.surface.get_size())
    camera[0] += dx
    camera[1] += dy
    ...

然后你像这样画你的地图

screen.blit(map1, (0,0), 
            (camera[0], camera[1], screen.get_width(), screen.get_height())
           )

这样地图将在相机的相反方向滚动,让玩家保持静止。

如果您不想让玩家在您的世界中移动,但不想在屏幕中移动,您可以执行以下操作:

screen.blit(player, (player.pos[0]-camera[0], player.pos[1]-camera[1]))
于 2013-08-16T17:14:40.810 回答