добавил код "границы столкновений" в мою программу pygame, теперь спрайты на экране не будут меняться, когда им нужно - PullRequest
0 голосов
/ 20 мая 2018

Я делаю небольшую тестовую игру на 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)

ширина плоскости и окна игры определяется перед этим извлечением;из этого небольшого отрывка также не осталось ничего слишком важного.(небольшая разница в отступе кода - это не проблема, а только то, что произошло во время публикации этого вопроса)

1 Ответ

0 голосов
/ 20 мая 2018

Ваш граничный тест неверен (проверяет x и y против width и игнорирует height), должен быть:

if (x > display_width - plane_width) \
        or (x < 0) \
        or (y > display_height - plane_height) \
        or (y < 0):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...