Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Баг в pygame

Иван Иваныч Мастер (1012), на голосовании 1 месяц назад
Баг заключается в том, что если сначала я зажимаю клавиши передвижения, а потом 1, то круг двигается нормально, а если сначала 1, а потом клавиши передвижения, то движение происходит только 1 тик и останавливается.
Код:::



import pygame
pygame.init()

sc = pygame.display.set_mode((1200, 90))

pygame.draw.circle (sc, (255, 255, 0), (400, 400), 100)
pygame.display.update()

x = 400
y = 400

While True:
for i in pygame.event.get():
if i.type is pygame.QUIT:
exit()
else:
keys = pygame.key.get_pressed()
if keys[pygame.K_1]:
if keys[pygame.K_LEFT]:
x -= 10
if keys[pygame.K_RIGHT]:
x += 10
if keys[pygame.K_UP]:
x -= 10
if keys[pygame.K_DOWN]:
x += 10
pygame.draw.rect(sc, (0, 0, 0), (0, 0, 1200, 900)
pygame.draw.circle (sc, (255, 255, 0), (x, y), 100)
pygame.display.update()
pygame.time.Clock().tick(24)
Голосование за лучший ответ
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (186048) 2 месяца назад
GPT-4o
В вашем коде есть несколько проблем, которые могут вызывать неожиданное поведение. Во-первых, обратите внимание на опечатки и ошибки в синтаксисе:

1. Слово `While` должно быть с маленькой буквы: `while`.
2. Метод `pygame.draw.rect` и его скобка неправильно закрыты. Убедитесь, что закрывающая скобка на месте.
3. Вы используете `is` для сравнения `i.type` с `pygame.QUIT`. Это не рекомендуется в Python для сравнения значений. Вместо этого используйте `==`.
4. Вы не обновляете координаты круга должным образом, потому что вы их изменяете в зависимости от клавиши `1`, вместо этого вам нужно отделить условие движения от нажатия клавиши `1`.
5. Вы используете одну и ту же логику для `pygame.K_UP` и `pygame.K_DOWN`, что неправильно. Должны быть разные оси (x и y).

Исправленный код будет выглядеть следующим образом:
 
import pygame
pygame.init()

sc = pygame.display.set_mode((1200, 900))

pygame.draw.circle(sc, (255, 255, 0), (400, 400), 100)
pygame.display.update()

x = 400
y = 400

while True:
for i in pygame.event.get():
if i.type == pygame.QUIT:
exit()

keys = pygame.key.get_pressed()
if keys[pygame.K_1]:
if keys[pygame.K_LEFT]:
x -= 10
if keys[pygame.K_RIGHT]:
x += 10
if keys[pygame.K_UP]:
y -= 10
if keys[pygame.K_DOWN]:
y += 10

pygame.draw.rect(sc, (0, 0, 0), (0, 0, 1200, 900))
pygame.draw.circle(sc, (255, 255, 0), (x, y), 100)
pygame.display.update()
pygame.time.Clock().tick(24)


Обратите внимание на исправления:
- Убедитесь, что условия для движения зависят только от стрелок, а не от клавиши `1`.
- Исправьте область экрана на `1200x900`, чтобы вместить круг.
- Проверьте синтаксис и следите за правильным использованием методов и условий.
Похожие вопросы