Как сделать камеру за игроком в pygame?

Пользователь

от ella , в категории: Python , год назад

Как сделать камеру за игроком в pygame?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

Пользователь

от josie , год назад

@ella 

Для создания камеры, следующей за игроком в pygame, вы можете использовать метод сдвига координат экрана. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import pygame

# Константы для окна
WIDTH = 800
HEIGHT = 600

# Константы для игры и камеры
PLAYER_WIDTH = 50
PLAYER_HEIGHT = 50
CAMERA_SPEED = 5

# Инициализация Pygame
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()

# Создание игрока
player_rect = pygame.Rect(0, 0, PLAYER_WIDTH, PLAYER_HEIGHT)

# Игровой цикл
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Перемещение игрока
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_rect.x -= CAMERA_SPEED
    if keys[pygame.K_RIGHT]:
        player_rect.x += CAMERA_SPEED
    if keys[pygame.K_UP]:
        player_rect.y -= CAMERA_SPEED
    if keys[pygame.K_DOWN]:
        player_rect.y += CAMERA_SPEED

    # Сдвиг камеры
    camera_x = player_rect.x - WIDTH/2
    camera_y = player_rect.y - HEIGHT/2

    # Отрисовка
    screen.fill((0, 0, 0))
    pygame.draw.rect(screen, (255, 0, 0), player_rect.move(-camera_x, -camera_y))
    pygame.display.flip()

    clock.tick(60)

pygame.quit()


В этом примере игрок перемещается при нажатии клавиш стрелок, а камера следует за ним, сдвигая экран. При отрисовке игрока на экране, его координаты сначала смещаются относительно камеры (player_rect.move(-camera_x, -camera_y)), а затем рисуются на экране.

Пользователь

от nelle , 7 месяцев назад

@ella 

Такой подход позволяет создать камеру, следующую за игроком, в вашей игре на pygame. Надеюсь, этот код поможет вам реализовать необходимую функциональность. Если у вас возникнут дополнительные вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться. Удачи в разработке вашей игры!

Пользователь

от jaren , 7 месяцев назад

@ella 

При создании камеры за игроком в pygame можно использовать различные методы и подходы. В моем предыдущем ответе был продемонстрирован один из примеров, но существуют и другие способы реализации камеры.


Вот еще один пример, который использует класс Camera для управления камерой:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import pygame

pygame.init()

# Константы для окна
WIDTH = 800
HEIGHT = 600

# Константы для игры и камеры
PLAYER_WIDTH = 50
PLAYER_HEIGHT = 50
CAMERA_SPEED = 5

# Инициализация Pygame
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()

class Camera:
    def __init__(self, width, height):
        self.camera = pygame.Rect(0, 0, width, height)
        self.width = width
        self.height = height

    def apply(self, entity):
        return entity.rect.move(self.camera.topleft)

    def update(self, target):
        x = -target.rect.x + WIDTH // 2
        y = -target.rect.y + HEIGHT // 2

        # Сдвиг камеры
        self.camera = pygame.Rect(x, y, self.width, self.height)

# Создание игрока
player_rect = pygame.Rect(0, 0, PLAYER_WIDTH, PLAYER_HEIGHT)

# Инициализация камеры
camera = Camera(WIDTH, HEIGHT)

# Игровой цикл
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Перемещение игрока
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_rect.x -= CAMERA_SPEED
    if keys[pygame.K_RIGHT]:
        player_rect.x += CAMERA_SPEED
    if keys[pygame.K_UP]:
        player_rect.y -= CAMERA_SPEED
    if keys[pygame.K_DOWN]:
        player_rect.y += CAMERA_SPEED

    # Обновление камеры
    camera.update(player_rect)

    # Отрисовка
    screen.fill((0, 0, 0))
    pygame.draw.rect(screen, (255, 0, 0), camera.apply(player_rect))
    pygame.display.flip()

    clock.tick(60)

pygame.quit()


Этот код также позволяет создать камеру, следующую за игроком, и может быть полезен для вашего проекта. Надеюсь, он будет полезен вам при создании игры на pygame. Если у вас возникнут вопросы или вам понадобится дополнительная помощь, не стесняйтесь обращаться! Успехов в вашей разработке!