Прыгающий мяч не возвращается - PullRequest
3 голосов
/ 05 марта 2019
import pygame

pygame.init()
width = 400
hight = 600
screen = pygame.display.set_mode((width, hight))
pygame.display.set_caption("Engine")
dot = pygame.image.load("KreisSchwarz.png")
clock = pygame.time.Clock()
running = True
WHITE = (255, 255, 255)

# Set (x, y) for Dot
def updateDot(x, y):
    screen.blit(dot, (x, y))

# Display Dot at (x, y)
def update(fps=30):
    screen.fill(WHITE)
    updateDot(x, y)
    pygame.display.flip()
    return clock.tick(fps)

# Quit if User closes the window
def evHandler():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            running = False

yKoords = []
(x, y) = (300, 200)
t = 1 # time variable
a = 2 # acceleration constant
tol = 40 # tolerance
i = 0 # just some iterator

# MAIN LOOP
while running:
    evHandler()
    update()
    y += a * (t ^ 2)
    t += 1
    yKoords.append(int(y))
    i += 1

    if (y < (hight + tol)) and (y > (hight - tol)):
        y = 580
        yKoords.reverse()
        update()

        for q in range(i):
            evHandler()
            y = yKoords[q]
            update()
            if q == i - 1: # Because i didn't write the Part for the Dot coming back down
                running = False

Это мой код для мяча, ускоряющегося вниз, а затем подпрыгивающего вверх. Моя проблема в том, что код работает нормально до оператора if. Там программа просто отображает шар в последней позиции в yKoords и ожидает окончания цикла for. Если я удаляю цикл for, шарик отображается при y = 580 и останавливается, но это нормально.

Пожалуйста, помогите, я понятия не имею, что не так об этом.

1 Ответ

0 голосов
/ 05 марта 2019

Не делайте отдельный цикл процесса в основном цикле.

Достаточно инвертировать направление, когда мяч отскакивает от земли (abs(y - hight)) или мяч достигает вершины (t == 0).

direction = 1
while running:
    evHandler()
    update()
    y += (a * (t ^ 2)) * direction
    t += direction

    if abs(y - hight) < tol:
        y = 580
        t -= 1
        direction *= -1
    elif t == 0:
        direction *= -1

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