Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Colisão não funciona quando altero o Sinal

import pygame


def game():
    yellow = (255, 255, 0)
    black = (0, 0, 0)
    radius = 30
    x_circle = 320            # Coordenada do Círuclo no eixo X
    y_circle = 240            # Coordenada do Círuclo no eixo Y
    speed_x = 0.1             # Sua velocidade pelo eixo X
    speed_y = 0.1             # Sua velocidade pelo eixo Y

    pygame.init()
    screen = pygame.display.set_mode((640, 480), 0)

    while True:
        # Calcular as regras
        x_circle += speed_x
        y_circle += speed_y

        # Movimentos no eixo X
        if x_circle + radius > 640:
            speed_x = -0.1
        if x_circle - radius < 0:
            speed_x = 0.1

        # Movimentos no eixo Y
        if y_circle + radius > 480:
            speed_y = -0.1
        if y_circle - radius < 0:
            speed_y = 0.1

        print(f'X = {x_circle:.0f} | Y = {y_circle:.0f}')

        # Pintar
        screen.fill(black)
        pygame.draw.circle(screen, yellow, (x_circle, y_circle), 30, 0)
        pygame.display.update()

        # Eventos
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                exit()


if __name__ == '__main__':
    game()

No laço, no cálculo das regras se eu alterar os sinais para "-=" a colisão para de funcionar, pq isso acontece, se meus ifs atendes os requisitos.

        x_circle -= speed_x
        y_circle -= speed_y
1 resposta
solução!

Fala Mayke, blz?

Cara pelo o que eu entendi do seu código, quando vc altera para x_circle -= speed_x, o x_circle vai recebendo -0.1 durante o while.

Só que, quando chega no if:

if x_circle - radius < 0:
            speed_x = 0.1

Ele continua recebendo -0.1, porque? você colocou antes do while que speed_x = 0.1. E no seu if ele continua recebendo speed_x = 0.1, então não alterou nada. A bolinha vai para o infinito e além.

Aconselho a trocar o speed_x = 0.1, para speed_x *= -1. Assim ele vai inverter o speed_x para -0.1 ou 0.1.

Segue um exemplo:

while True:
        # Calcular as regras
        x_circle -= speed_x
        y_circle -= speed_y

        # Movimentos no eixo X
        if x_circle + radius > 640 or x_circle - radius < 0:
            speed_x *= -1

        # Movimentos no eixo Y
        if y_circle + radius > 480 or y_circle - radius< 0:
            speed_y *= -1

        print(f'X = {x_circle:.0f} | Y = {y_circle:.0f}')

        # Pintar
        screen.fill(black)
        pygame.draw.circle(screen, yellow, (x_circle, y_circle), 30, 0)
        pygame.display.update()

        # Eventos
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                exit()