pygame.Surface.scroll()
не делает то, что вы ожидаете.Она не бесшовная катится поверхность.См. Документацию:
scroll()
Сдвиг изображения поверхности на место
[...] Области поверхности, которые не были перезаписаны, сохраняют свои исходные значения пикселей.[...]
Вы должны написать свои собственные scroll функции, которые помещают часть поверхности, которая была смещена, на другую сторону от вашей поверхности,
например, написать 2 функции (scrollX
и scrollY
), которые могут свернуть вдоль оси:
def scrollX(screenSurf, offsetX):
width, height = screenSurf.get_size()
copySurf = screenSurf.copy()
screenSurf.blit(copySurf, (offsetX, 0))
if offsetX < 0:
screenSurf.blit(copySurf, (width + offsetX, 0), (0, 0, -offsetX, height))
else:
screenSurf.blit(copySurf, (0, 0), (width - offsetX, 0, offsetX, height))
def scrollY(screenSurf, offsetY):
width, height = screenSurf.get_size()
copySurf = screenSurf.copy()
screenSurf.blit(copySurf, (0, offsetY))
if offsetY < 0:
screenSurf.blit(copySurf, (0, height + offsetY), (0, 0, width, -offsetY))
else:
screenSurf.blit(copySurf, (0, 0), (0, height - offsetY, width, offsetY))
if pressed[pygame.K_UP]:
scrollY(screen, 2)
elif pressed[pygame.K_DOWN]:
scrollY(screen, -2)
elif pressed[pygame.K_LEFT]:
scrollX(screen, 2)
elif pressed[pygame.K_RIGHT]:
scrollX(screen, -2)
![](https://i.stack.imgur.com/QosjL.gif)