Рух персонажів
Рух персонажів у Pygame є важливою частиною гри, яка робить її більш інтерактивною та динамічною. У цій інструкції розглянемо, як реалізувати рух персонажа за допомогою клавіш, а також додамо обмеження на рух персонажа в межах екрану.
Крок 1: Базовий рух персонажа
Спочатку створимо клас `Player`, який дозволятиме персонажу рухатися в усіх напрямках за допомогою клавіш зі стрілками.
import pygame
import sys
- Ініціалізація Pygame
pygame.init() - Налаштування розмірів вікна
screen = pygame.display.set_mode((800, 600)) - Встановлення назви вікна
pygame.display.set_caption(“Рух персонажа в Pygame”) - Задання кольорів
WHITE = (255, 255, 255) - Клас персонажа
class Player:
def __init__(self, x, y, width, height, color):
self.rect = pygame.Rect(x, y, width, height)
self.color = color
self.speed = 5 - def draw(self, screen):
pygame.draw.rect(screen, self.color, self.rect) - def move(self, keys):
if keys[pygame.K_LEFT]:
self.rect.x -= self.speed
if keys[pygame.K_RIGHT]:
self.rect.x += self.speed
if keys[pygame.K_UP]:
self.rect.y -= self.speed
if keys[pygame.K_DOWN]:
self.rect.y += self.speed - Створення персонажа
player = Player(100, 100, 50, 50, (0, 128, 255)) - Основний цикл гри
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit() - Отримання стану клавіш
keys = pygame.key.get_pressed() - Рух персонажа
player.move(keys) - Заповнення екрану білим кольором
screen.fill(WHITE) - Малювання персонажа
player.draw(screen) - Оновлення дисплея
pygame.display.flip()
Крок 2: Обмеження руху в межах екрану
Щоб персонаж не виходив за межі екрану, додамо перевірку меж в методі `move`.
class Player:
def __init__(self, x, y, width, height, color):
self.rect = pygame.Rect(x, y, width, height)
self.color = color
self.speed = 5
def draw(self, screen):
pygame.draw.rect(screen, self.color, self.rect)
def move(self, keys):
if keys[pygame.K_LEFT]:
self.rect.x -= self.speed
if keys[pygame.K_RIGHT]:
self.rect.x += self.speed
if keys[pygame.K_UP]:
self.rect.y -= self.speed
if keys[pygame.K_DOWN]:
self.rect.y += self.speed
# Обмеження руху в межах екрану
if self.rect.left < 0:
self.rect.left = 0
if self.rect.right > 800:
self.rect.right = 800
if self.rect.top < 0:
self.rect.top = 0
if self.rect.bottom > 600:
self.rect.bottom = 600
Крок 3: Додавання плавного руху
Плавний рух можна досягти за допомогою збільшення швидкості персонажа при натисканні певної клавіші (наприклад, `Shift`).
class Player:
def __init__(self, x, y, width, height, color):
self.rect = pygame.Rect(x, y, width, height)
self.color = color
self.speed = 5
def draw(self, screen):
pygame.draw.rect(screen, self.color, self.rect)
def move(self, keys):
actual_speed = self.speed
if keys[pygame.K_LSHIFT] or keys[pygame.K_RSHIFT]:
actual_speed *= 2 # Збільшення швидкості при натисканні Shift
if keys[pygame.K_LEFT]:
self.rect.x -= actual_speed
if keys[pygame.K_RIGHT]:
self.rect.x += actual_speed
if keys[pygame.K_UP]:
self.rect.y -= actual_speed
if keys[pygame.K_DOWN]:
self.rect.y += actual_speed
# Обмеження руху в межах екрану
if self.rect.left < 0:
self.rect.left = 0
if self.rect.right > 800:
self.rect.right = 800
if self.rect.top < 0:
self.rect.top = 0
if self.rect.bottom > 600:
self.rect.bottom = 600
Крок 4: Додавання інерції та гальмування
Для створення більш реалістичного руху можна додати ефект інерції, коли персонаж продовжує рухатися після відпускання клавіші і поступово зупиняється.
class Player:
def __init__(self, x, y, width, height, color):
self.rect = pygame.Rect(x, y, width, height)
self.color = color
self.speed = 5
self.velocity = [0, 0]
self.friction = 0.9 # Коефіцієнт гальмування
def draw(self, screen):
pygame.draw.rect(screen, self.color, self.rect)
def move(self, keys):
if keys[pygame.K_LEFT]:
self.velocity[0] -= self.speed
if keys[pygame.K_RIGHT]:
self.velocity[0] += self.speed
if keys[pygame.K_UP]:
self.velocity[1] -= self.speed
if keys[pygame.K_DOWN]:
self.velocity[1] += self.speed
# Додавання інерції
self.rect.x += self.velocity[0]
self.rect.y += self.velocity[1]
# Застосування гальмування
self.veloci
ty[0] *= self.friction
self.velocity[1] *= self.friction
# Обмеження руху в межах екрану
if self.rect.left < 0:
self.rect.left = 0
self.velocity[0] = 0
if self.rect.right > 800:
self.rect.right = 800
self.velocity[0] = 0
if self.rect.top < 0:
self.rect.top = 0
self.velocity[1] = 0
if self.rect.bottom > 600:
self.rect.bottom = 600
self.velocity[1] = 0
Висновок
Реалізація руху персонажа в Pygame є ключовим аспектом ігрової логіки. Ви можете додавати різні ефекти та параметри, такі як обмеження руху в межах екрану, інерцію, гальмування і навіть плавний рух. Це робить гру більш цікавою та реалістичною.