Я делаю небольшую тестовую игру на pygame, где вам нужно летать самолетом по экрану, не касаясь границ окна, иначе игра закроется.Прежде чем добавить код границ, я смог изменить спрайт самолета, когда он летел влево или вправо, наклоняясь в соответствующем направлении.Теперь, хотя код «границы столкновения» не имеет никакого отношения к коду спрайтов, плоскость остается только в своем исходном спрайте и не изменяется (она все еще перемещается, и код границы работает нормально, но сам спрайт не изменится).
вот мой код:
def game_loop():
x = display_width * 0.45
y = display_height * 0.8
x_change = 0
accel_x = 0
y_change = 0
accel_y = 0
max_speed_x = 2.5
max_speed_y = 2.5
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
elif event.type == pygame.KEYDOWN:
if event.key in (pygame.K_LEFT, pygame.K_a):
accel_x = -.2
img = pygame.image.load('PocketFlyer3.png')
img = pygame.transform.scale(img, (32, 32))
elif event.key in (pygame.K_RIGHT, pygame.K_d):
accel_x = .2
img = pygame.image.load('PocketFlyer2.png')
img = pygame.transform.scale(img, (32, 32))
if event.key in (pygame.K_UP, pygame.K_w):
accel_y = -.2
elif event.key in (pygame.K_DOWN, pygame.K_s):
accel_y = .2
elif event.type == pygame.KEYUP:
if event.key in (pygame.K_LEFT, pygame.K_RIGHT, pygame.K_a, pygame.K_d):
accel_x = 0
img = pygame.image.load('PocketFlyer1.png')
img = pygame.transform.scale(img, (32, 32))
if event.key in (pygame.K_UP, pygame.K_DOWN, pygame.K_w, pygame.K_s):
accel_y = 0
#accel script for X
x_change += accel_x
if abs(x_change) >= max_speed_x:
x_change = x_change/abs(x_change) * max_speed_x
if accel_x == 0:
x_change *= 0.92
x += x_change
#accel script for Y
y_change += accel_y
if abs(y_change) >= max_speed_y:
y_change = y_change/abs(y_change) * max_speed_y
if accel_y == 0:
y_change *= 0.92
y += y_change
display.fill(skyblue)
plane(x,y)
if x > display_width - plane_width or x < 0 or y > display_width - plane_width or y < 0:
gameExit = True
pygame.display.update()
clock.tick(60)
ширина плоскости и окна игры определяется перед этим извлечением;из этого небольшого отрывка также не осталось ничего слишком важного.(небольшая разница в отступе кода - это не проблема, а только то, что произошло во время публикации этого вопроса)