Движение персонажей

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

Движение персонажей в 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] или 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.velocity[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

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