Я планирую сделать простую игру с боковым скроллером с использованием pygame, но прокрутка немного сбивает меня с толку. Я свободно следовал руководству YouTube, чтобы помочь мне в этом, но код, который я сделал, работает не так, как ожидалось. Я использую Python 3.6 и использую PyCharm.
Я просмотрел части учебника, который использовал, и все, что у меня есть, соответствует правильно. В учебнике использовался Python 2.7, но я не думаю, что это должно повлиять на него слишком сильно. Я относительно новичок в программировании и Python, поэтому я не могу сказать, что не так
import pygame
from pygame.locals import *
black = (0, 0, 0, 255)
white = (255, 255, 255, 255)
w = 1280
h = 720
hw = w / 2
hh = h / 2
pygame.init()
clock = pygame.time.Clock()
ds = pygame.display.set_mode((w, h))
pygame.display.set_caption("Side Scroller!")
FPS = 500
bg = pygame.image.load("mountains.png").convert()
bg_width, bg_height = bg.get_rect().size
stageWidth = bg_width * 2
stagePosX = 0
startScrollingPosX = hw
circleRadius = 25
circlePosX = circleRadius
playerPosX = circleRadius
playerPosY = 585
PlayerVelocityX = 0
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
k = pygame.key.get_pressed()
if k[K_RIGHT]:
playerVelocityX = 1
elif k[K_LEFT]:
playerVelocityX = -1
else:
playerVelocityX = 0
playerPosX += playerVelocityX
if playerPosX > stageWidth - circleRadius:
playerPosX = stageWidth - circleRadius
if playerPosX < circleRadius:
playerPosX = circleRadius
if playerPosX < startScrollingPosX:
circlePosX = playerPosX
elif playerPosX > stageWidth - startScrollingPosX:
circlePosX = playerPosX - stageWidth + w
else:
circlePosX = startScrollingPosX
stagePosX += -playerVelocityX
rel_x = stagePosX % bg_width
ds.blit(bg, (rel_x, 0))
if rel_x < w:
ds.blit(bg, (rel_x, 0))
pygame.draw.circle(ds, white, (circlePosX, playerPosY - 25),
circleRadius, 0)
pygame.display.update()
clock.tick(FPS)
ds.fill(black)
Фон должен начать прокручиваться, как только шарик достигнет середины экрана, но вместо этого он падает, когда шарик попадает в середину экрана. Кроме того, фон отображается не полностью, а фон обрезается в направлении y.