Pygame - перемещение прямоугольника между двумя точками - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь сделать прямоугольное движение между двумя точками в пигме. Я смог заставить его переместиться на другой прямоугольник и затем остановиться, но тогда он не будет двигаться назад, как должно. Я не уверен, что делаю не так, поэтому решил обратиться за помощью. Вот мой код:

import pygame

width, height = 800, 600
gameDisplay = pygame.display.set_mode((width, height))
pygame.display.set_caption("Test")
gameExit = False
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
block_size = 10


def gameloop():
    lead_x1, lead_x2 = 1, 100
    lead_y1, lead_y2 = 1, 1
    velocity = 0.2
    gameExit = False
    white = (255, 255, 255)
    black = (0, 0, 0)
    red = (255, 0, 0)
    block_size = 10

    while not gameExit:
        gameDisplay.fill(white)
        pygame.draw.rect(gameDisplay, black, [lead_x1, lead_y1, block_size, block_size])
        pygame.draw.rect(gameDisplay, black, [lead_x2, lead_y2, block_size, block_size])
        lead_x1 += velocity
        if lead_x1 >= lead_x2:
            lead_x1 += -velocity
        if lead_x1 <= 0:
            lead_x1 += velocity
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameExit = True
        pygame.display.update()
    pygame.quit()
    quit()
gameloop()

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, вам нужно поместить строку lead_x1 += velocity внутри оператора else, что-то вроде этого: -

import pygame

width, height = 800, 600
gameDisplay = pygame.display.set_mode((width, height))
pygame.display.set_caption("Test")
gameExit = False
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
block_size = 10


def gameloop():
    lead_x1, lead_x2 = 1, 100
    lead_y1, lead_y2 = 1, 1
    velocity = 0.2
    gameExit = False
    white = (255, 255, 255)
    black = (0, 0, 0)
    red = (255, 0, 0)
    block_size = 10
    toogle_flag = 1
    while not gameExit:
        gameDisplay.fill(white)
        pygame.draw.rect(gameDisplay, black, [lead_x1, lead_y1, block_size, block_size])
        pygame.draw.rect(gameDisplay, black, [lead_x2, lead_y2, block_size, block_size])
        lead_x1 += toggle_flag * velocity
        if lead_x1 >= lead_x2:
            toggle_flag = -1*toggle_flag
        if lead_x1 <= 0:
            toggle_flag = -1*toggle_flag
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameExit = True
        pygame.display.update()
    pygame.quit()
    quit()
gameloop()

Итак, что я здесь делаю, давайте возьмем флаг с именем toggle_flag, инициализируем его как 1.

  1. Выходная коробка находится в позиции 1, мы добавляем toggle_flag * velocity к нашему lead_x1. то есть мы в основном добавляем velocity.

  2. Как только мы коснемся второго поля, мы изменяем значение от toggle_flag до -1. Что произойдет, мы продолжаем добавлять -velocity к нашему lead_x1.

  3. Теперь, когда мы достигнем 0. Мы снова переворачиваем значение toggle_flag, умножая его на -1, что позволяет нам добавить velocity к lead_x1.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...