1
resposta

[Bug] bug estranho no codigo

import pygame

tela = pygame.display.set_mode((640,480),0)
amarelo = (255,255,0)
xbolinha = 10
ybolinha = 240
preto = (0,0,0)
velocidadex = 0.3
velocidadey = 0.3
raio = 29

while True:

    xbolinha = xbolinha + velocidadex
    if xbolinha + raio > 640 :
        velocidadex = velocidadex * -1
    elif xbolinha - raio < 0:
        velocidadex = velocidadex * -1

    ybolinha = ybolinha + velocidadey
    if ybolinha + raio > 480:
        velocidadey = velocidadey * -1
    elif ybolinha - raio < 0:
        velocidadey = velocidadey * -1

    tela.fill(preto)
    pygame.draw.circle(tela,amarelo,(xbolinha,ybolinha), raio, 0)
    pygame.display.update()

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

porque a bolinha esta se movimentando apenas para cima e para baixo?

esse efeito só acontece quando o "elif xbolinha - raio < 0: ..." esta com o - raio, se eu tiro o - raio a bolinha se move normalmente

1 resposta

Olá Thiago, tudo bem com você?

Este comportamento está acontecendo devido a não declaração e uso de uma variável que terá um valor padrão para a velocidade e que será atribuída as velocidades velocidadex e velocidadey. As mudanças acontecerão no laço while, conforme apresentado abaixo:

velocidade = 0.3
while True:

    xbolinha = xbolinha + velocidadex
    if xbolinha + raio > 640:
        velocidadex = velocidade * -1
    elif xbolinha - raio < 0:
        velocidadex = velocidade

    ybolinha = ybolinha + velocidadey
    if ybolinha + raio > 480:
        velocidadey = velocidade * -1
    elif ybolinha - raio < 0:
        velocidadey = velocidade

Note que foi necessário retirar a multiplicação por -1 nas estruturas condicionais elif xbolinha - raio < 0 e elif ybolinha - raio < 0.

Código completo com as mudanças aplicadas:

import pygame

tela = pygame.display.set_mode((640, 480), 0)
amarelo = (255, 255, 0)
xbolinha = 10
ybolinha = 240
preto = (0, 0, 0)


velocidadex = 0.3
velocidadey = 0.3
raio = 29

velocidade = 0.3
while True:

    xbolinha = xbolinha + velocidadex
    if xbolinha + raio > 640:
        velocidadex = velocidade * -1
    elif xbolinha - raio < 0:
        velocidadex = velocidade

    ybolinha = ybolinha + velocidadey
    if ybolinha + raio > 480:
        velocidadey = velocidade * -1
    elif ybolinha - raio < 0:
        velocidadey = velocidade

    tela.fill(preto)
    pygame.draw.circle(tela, amarelo, (xbolinha, ybolinha), raio, 0)
    pygame.display.update()

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

Após as mudanças aplicadas, salve o arquivo e execute-o.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Espero ter lhe ajudado. Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software