所以,我正在使用Pygame在Python中制作一个2d topviewed游戏。我一直在努力创造一种让玩家保持在屏幕中心的相机运动。我该怎么做?我希望在一个表面上有“地图”,这将是屏幕表面的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
我找到了this,但这是一个侧视平台游戏。所以我的地图看起来像这样:
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。我希望你能理解我在这里问的是什么,英语不是我的母语。 =)
答案 0 :(得分: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]))