Вот автономный пример, который отслеживает положение вида / камеры на более крупном фоне.
import pygame
W = 600
H = 400
pygame.init()
# generate repeated KEYDOWN events when a key is held
pygame.key.set_repeat(500, 50)
screen = pygame.display.set_mode([W, H])
# image = pygame.image.load('huge_bkgnd.png').convert_alpha()
#create a large bkgnd image
bkgnd = pygame.Surface((W*10, H*10))
# draw a rainbow on the bkgnd surface
colours = ["red", "orange", "yellow", "green", "lightblue1", "blue", "purple"]
bar_width = bkgnd.get_width() // (10 * len(colours))
for x in range(0, bkgnd.get_width() // bar_width):
rect = [x*bar_width, 0, bar_width, bkgnd.get_height()]
bkgnd.fill(pygame.Color(colours[x % len(colours)]), rect)
position = [0, 0]
clock = pygame.time.Clock() #for limiting FPS
finished = False
while not finished:
for event in pygame.event.get():
if event.type == pygame.QUIT:
finished = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
position[0] -= 100
if event.key == pygame.K_RIGHT:
position[0] += 100
if event.key == pygame.K_UP:
position[1] -= 100
if event.key == pygame.K_DOWN:
position[1] += 100
# for all key movement clamp position to size of background
position[0] = max(0, min(position[0], bkgnd.get_width() - W))
position[1] = max(0, min(position[1], bkgnd.get_height() - H))
try:
x = position[0] + W*2 # just look at what's to the right
y = position[1]
print(f"At {position}: Heading for ({x},{y}) {bkgnd.get_at((x, y))}")
except IndexError:
print(f"Heading for the edge! {bkgnd.get_width() - position[0]} to go!")
# copy bkgnd to screen
view_rect = (*position, W, H)
screen.blit(bkgnd.subsurface(view_rect), (0,0))
# update the screen
pygame.display.update()
clock.tick(60) # limit FPS
pygame.quit()
В начале игнорируйте бит хаки, чтобы создать фоновое изображение радуги, чтобы горизонтальное движение былоочевидно.
Программа перемещает позицию на основе нажатия клавиш со стрелками.Использование pygame.key.set_repeat()
позволяет удерживать клавиши со стрелками.
В цикле событий есть небольшая уборка, чтобы гарантировать, что представление не может выйти за границы фона.Затем он печатает цвет пикселя на расстоянии.
После обработки событий на экран выводится участок фона на основе текущей позиции.
Дайте мне знатьесли вам нужны какие-либо разъяснения.