Рух персонажів

Прокрутити вниз

Рух персонажів у 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

Тест Python. Рух персонажів.

Висновок

Реалізація руху персонажа в Pygame є ключовим аспектом ігрової логіки. Ви можете додавати різні ефекти та параметри, такі як обмеження руху в межах екрану, інерцію, гальмування і навіть плавний рух. Це робить гру більш цікавою та реалістичною.