Когда ваш 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)`, чтобы сделать движение более плавным.
Этот код дает вам стартовую основу, которую можно использовать для создания игр с передвижением объектов. Вы можете расширять его, добавляя новые функции, такие как столкновения, анимации и другие элементы геймплея.