Почему Pygame закрывается, когда я нажимаю на окно? Не могу разобраться, в чем проблема.

Как можно улучшить код, чтобы он корректно реализовывал движение объекта в Pygame, включая обработку событий клавиатуры и управление положением объекта на экране?
  • 7 декабря 2024 г. 9:23
Ответы на вопрос 2
Когда ваш Pygame-приложение закрывается при нажатии на окно, это обычно связано с тем, что не обрабатывается событие закрытия окна. Чтобы устранить эту проблему, важно убедиться, что вы правильно обрабатываете события в основном игровом цикле.

Вот базовый шаблон, который демонстрирует, как можно реализовать движение объекта (например, квадрат) с использованием обработки событий клавиатуры:

```python
import pygame
import sys

# Инициализация Pygame
pygame.init()

# Настройка параметров окна
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Движение объекта в Pygame")

# Определение цветов
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

# Начальная позиция объекта
x, y = width // 2, height // 2
size = 50
speed = 5

# Основной игровой цикл
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # Обработка события закрытия окна
            pygame.quit()
            sys.exit()

    # Обработка нажатий клавиш
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        x -= speed
    if keys[pygame.K_RIGHT]:
        x += speed
    if keys[pygame.K_UP]:
        y -= speed
    if keys[pygame.K_DOWN]:
        y += speed

    # Ограничение движения объекта в пределах экрана
    x = max(0, min(x, width - size))
    y = max(0, min(y, height - size))

    # Обновление экрана
    screen.fill(BLACK)  # Очистка экрана
    pygame.draw.rect(screen, WHITE, (x, y, size, size))  # Рисуем объект
    pygame.display.flip()  # Обновляем экран

    # Ограничение частоты кадров
    pygame.time.Clock().tick(60)  # 60 FPS
```

### Основные элементы кода выше:

1. **Инициализация Pygame:** Не забывайте вызывать `pygame.init()` для инициализации всех модулей Pygame, а также `pygame.display.set_mode()` для создания окна.

2. **Обработка событий:** В игровом цикле обрабатываются события, включая `pygame.QUIT` для закрытия приложения.

3. **Движение объекта:** Мы используем `pygame.key.get_pressed()`, чтобы узнать, какие клавиши нажаты, и изменяем координаты объекта на основе нажатых клавиш.

4. **Ограничение движения:** Код гарантирует, что объект не выходит за пределы окна.

5. **Частота кадров:** Мы ограничиваем FPS с помощью `pygame.time.Clock().tick(60)`, чтобы сделать движение более плавным.

Этот код дает вам стартовую основу, которую можно использовать для создания игр с передвижением объектов. Вы можете расширять его, добавляя новые функции, такие как столкновения, анимации и другие элементы геймплея.
У вас ошибка здесь: 
while y_house < HEIGHT:
    y += 9.8
Вы меняете y , но y у вас никак не связано с y_house , из-за чего этот цикл получается бесконечным ( y_house не меняется и так и остается меньше HEIGHT ).

Поэтому вам надо сделать вот так:
while y_house < HEIGHT:
    y_house += 9.8

Так всё работает
Похожие вопросы