Я делаю небольшую игру в pygame и использую скрипт из первого ответа здесь , чтобы создать камеру, которая будет следовать за моим персонажем по экрану:
def __init__(self, target, world_size):
super().__init__()
self.target = target
self.cam = pygame.Vector2(0, 0)
self.world_size = world_size
if self.target:
self.add(target)
def update(self, *args):
super().update(*args)
if self.target:
x = -self.target.rect.center[0] + SCREEN_SIZE.width/2
y = -self.target.rect.center[1] + SCREEN_SIZE.height/2
self.cam += (pygame.Vector2((x, y)) - self.cam) * 0.05
self.cam.x = max(-(self.world_size.width-SCREEN_SIZE.width), min(0, self.cam.x))
self.cam.y = max(-(self.world_size.height-SCREEN_SIZE.height), min(0, self.cam.y))
def draw(self, surface):
spritedict = self.spritedict
surface_blit = surface.blit
dirty = self.lostsprites
self.lostsprites = []
dirty_append = dirty.append
init_rect = self._init_rect
for spr in self.sprites():
rec = spritedict[spr]
newrect = surface_blit(spr.image, spr.rect.move(self.cam))
if rec is init_rect:
dirty_append(newrect)
else:
if newrect.colliderect(rec):
dirty_append(newrect.union(rec))
else:
dirty_append(newrect)
dirty_append(rec)
spritedict[spr] = newrect
return dirty
Как можно добавить фоновое изображение, которое будет прокручиваться одновременно / вместе с уровнем, чтобы только двигалось, когда игрок это делает.Я попытался выяснить, что означает код в методе отрисовки Camera, чтобы я мог его изменить, но был очень смущен, так как я новичок в pygame и еще не слишком опытен в python.Уровень строится с помощью этого кода (также из другого вопроса):
def main():
pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE.size)
pygame.display.set_caption("Use arrows to move!")
timer = pygame.time.Clock()
level = [
"PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",
"P P",
"P PPPPPP P",
"P P",
"PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",]
platforms = pygame.sprite.Group()
player = Player(platforms, (TILE_SIZE, TILE_SIZE))
level_width = len(level[0])*TILE_SIZE
level_height = len(level)*TILE_SIZE
entities = CameraAwareLayeredUpdates(player, pygame.Rect(0, 0, level_width, level_height))
Я также пытался сделать фоновую прокрутку отдельно, в зависимости от того, движется игрок или нет, но это вызвало смещениефактических платформ на сцене и на заднем плане.Это очень проблематично, потому что моя «история» опирается на фон и текстовые поля, которые появляются при наступлении на определенные кубики, рядом с символами, нарисованными на фоне.
Я надеюсь, что предоставил все необходимое для ответа изадал понятный вопрос.В противном случае, пожалуйста, дайте мне знать, какая другая информация необходима, я благодарю всех, кто пытается заранее.