Aprenda a modelar uma câmera que pode se mover pelo mundo do jogo para adicionar realismo e funcionalidade.

Um recurso comum que você encontrará em muitos jogos é uma câmera de rolagem que segue você conforme você se move pelo mundo do jogo. Esse efeito pode adicionar profundidade e realismo ao seu jogo e melhorar a experiência geral do jogo.

Existem muitas maneiras diferentes de implementar uma câmera de rolagem no PyGame, portanto, certifique-se de entender suas diferenças.

Criando um jogo simples

Antes de começar, instale o pip no seu dispositivo e use o comando abaixo para instalar o módulo PyGame:

pip instalar pygame

Agora, você pode criar um jogo simples com um retângulo de jogador e duas plataformas estáticas. O jogador pode se mover para a esquerda e para a direita usando as setas do teclado.

Você pode encontrar o código completo para o projeto neste repositório GitHub.

Comece importando o módulo pygame. Em seguida, inicialize-o e crie a janela do jogo usando o pygame.display.set_mode()

função. Em seguida, defina a legenda da janela e crie o objeto de relógio para gerenciar a taxa de quadros.

importar pygame

pygame.init()

WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600

tela = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))

pygame.display.set_caption("Meu Jogo Simples")

clock = pygame.time. Relógio()

FUNDO_COLOR = (255, 255, 255)

Em seguida, configure o player e as plataformas estáticas. Defina o tamanho do jogador e sua posição inicial.

PLAYER_WIDTH = 50
PLAYER_HEIGHT = 50

player_x = WINDOW_WIDTH // 2 - PLAYER_WIDTH // 2
player_y = WINDOW_HEIGHT - PLAYER_HEIGHT - 20

PLAYER_SPEED = 10

RECTANGLE_COLOR_1 = (255, 0, 0)
RECTANGLE_COLOR_2 = (0, 0, 255)

retângulo_1 = pygame. Rect(200, 200, 100, 100)
retângulo_2 = pygame. Rect(500, 300, 150, 50)

Em seguida, crie um loop de jogo que manipule eventos e atualize a tela. No loop, verifique eventos como sair do jogo ou mover o jogador usando as teclas de seta.

enquantoVerdadeiro:
# Tratar eventos
para evento em pygame.event.get():
se event.type == pygame. DESISTIR:
pygame.quit()
desistir()

# Desenhe o fundo
screen.fill (BACKGROUND_COLOR)

# Desenhe os retângulos estáticos
pygame.draw.rect (tela, RECTANGLE_COLOR_1, retângulo_1)
pygame.draw.rect (tela, RECTANGLE_COLOR_2, retângulo_2)

# Desenhe o jogador
player_rect = pygame. Rect (player_x, player_y, PLAYER_WIDTH,
PLAYER_HEIGHT)

pygame.draw.rect (tela, (0, 0, 0), player_rect)

# Atualize a exibição
pygame.display.update()

# Limite a taxa de quadros
relógio.tick(30)

Configurando a Câmera

Agora que você tem um jogo simples com um retângulo de jogador e duas plataformas estáticas, pode começar a trabalhar na câmera. No PyGame, a câmera é essencialmente apenas um deslocamento que atua em todos os objetos que você desenha na tela. Isso significa que se você mover a câmera para a esquerda, tudo na tela parecerá se mover para a direita.

Para configurar a câmera, primeiro você precisa definir uma variável para manter o deslocamento X da câmera. Chame esta variável camera_offset_x e inicialize-o com 0.

# Defina o deslocamento da câmera
camera_offset_x = 0

Em seguida, atualize as posições de todos os objetos que você desenha na tela, para levar em consideração o deslocamento da câmera. Você pode fazer isso adicionando o camera_offset_x valor para a posição X de cada objeto. Por exemplo, você pode atualizar a posição do jogador assim:

# Desenhe o jogador
player_rect = pygame. Rect (player_x + camera_offset_x, player_y, PLAYER_WIDTH,
PLAYER_HEIGHT)

pygame.draw.rect (tela, (0, 0, 0), player_rect)

Da mesma forma, você pode atualizar as posições das plataformas estáticas da seguinte maneira:

# Desenhe os retângulos estáticos
retângulo_1_draw_pos = retângulo_1.move (camera_offset_x, 0)
pygame.draw.rect (tela, RECTANGLE_COLOR_1, retângulo_1_draw_pos)

retângulo_2_draw_pos = retângulo_2.move (camera_offset_x, 0)
pygame.draw.rect (tela, RECTANGLE_COLOR_2, retângulo_2_draw_pos)

Movendo a câmera com entradas de teclado

Agora que você configurou a câmera, pode começar a movê-la. Uma maneira de fazer isso é mover a câmera em resposta às entradas do teclado. Por exemplo, você pode mover a câmera para a esquerda quando o jogador pressiona a tecla de seta para a esquerda.

Para fazer isso, adicione o seguinte código dentro do loop de eventos que manipula as entradas do teclado:

se event.type == pygame. TECLA PARA BAIXO:
se event.key == pygame. K_ESQUERDA:
camera_offset_x -= PLAYER_SPEED
elif event.key == pygame. K_RIGHT:
camera_offset_x += PLAYER_SPEED

Outra maneira é alterar a coordenada x do jogador pressionando o teclado e, em seguida, atualizar o deslocamento da câmera. Você pode implementar isso assim:

# Tratar eventos
para evento em pygame.event.get():
se event.type == pygame. DESISTIR:
pygame.quit()
desistir()

se event.type == pygame. TECLA PARA BAIXO:
se event.key == pygame. K_ESQUERDA:
player_x -= PLAYER_SPEED
elif event.key == pygame. K_RIGHT:
player_x += PLAYER_SPEED

Em seguida, você pode atualizar o deslocamento da câmera em relação à coordenada x do jogador da seguinte forma:

camera_offset_x = WINDOW_WIDTH // 2 - player_x - PLAYER_WIDTH // 2

Movendo a câmera com entradas do mouse

Outra maneira de mover a câmera é usar o mouse. Você pode permitir que o jogador arraste a tela clicando e arrastando o mouse.

Para fazer isso, acompanhe a posição do mouse quando o jogador pressiona o botão esquerdo do mouse. Quando eles moverem o mouse, atualize a coordenada x do jogador. Deve mudar pela diferença entre a posição atual do mouse e a posição inicial que você rastreou, mouse_start_pos.

# Tratar eventos
para evento em pygame.event.get():
se event.type == pygame. DESISTIR:
pygame.quit()
desistir()

se event.type == pygame. BOTÃO DO MOUSE PARA BAIXO:
se evento.botão == 1:
mouse_start_pos = pygame.mouse.get_pos()

se event.type == pygame. MOVIMENTO DO MOUSE:
se pygame.mouse.get_pressed()[0]:
mouse_current_pos = pygame.mouse.get_pos()
mouse_offset_x = mouse_current_pos[0] - mouse_start_pos[0]
player_x -= mouse_offset_x
mouse_start_pos = mouse_current_pos

Adicionando mais recursos de câmera

Além do efeito de rolagem da câmera, você pode adicionar vários outros recursos relacionados à câmera para aprimorar a experiência de jogo. Um desses recursos é um efeito de câmera com zoom que permite ao jogador aumentar ou diminuir o zoom do mundo do jogo. Você pode obter esse efeito alterando o tamanho da janela do jogo e dimensionando os objetos desenhados na tela.

Para fazer isso, defina uma variável de zoom que armazenará o nível de zoom atual do jogo. Defina seu valor inicial como 1,0, o que representa nenhum zoom. Em seguida, defina uma função que calculará o tamanho em escala de um objeto com base no nível de zoom atual.

zoom = 1.0

defget_scaled_size(tamanho):
retornar int (tamanho * zoom)

Em seguida, atualize as posições e tamanhos dos objetos desenhados na tela usando o get_scaled_size função. Por exemplo, você pode atualizar a posição e o tamanho do player da seguinte maneira:

player_rect = pygame. Rect(
get_scaled_size (player_x + camera_offset_x),
get_scaled_size (player_y),
get_scaled_size (PLAYER_WIDTH),
get_scaled_size (PLAYER_HEIGHT)
)

Da mesma forma, atualize as posições e tamanhos das plataformas estáticas da seguinte forma:

retângulo_1_draw_pos = pygame. Rect(
get_scaled_size (retângulo_1.x + camera_offset_x),
get_scaled_size (retângulo_1.y),
get_scaled_size (rectangle_1.width),
get_scaled_size (rectangle_1.height)
)

pygame.draw.rect (tela, RECTANGLE_COLOR_1, retângulo_1_draw_pos)

retângulo_2_draw_pos = pygame. Rect(
get_scaled_size (retângulo_2.x + camera_offset_x),
get_scaled_size (retângulo_2.y),
get_scaled_size (rectangle_2.width),
get_scaled_size (retângulo_2.height)
)

pygame.draw.rect (tela, RECTANGLE_COLOR_2, retângulo_2_draw_pos)

Aumente ou diminua o nível de zoom em 0,1 quando o jogador pressiona o botão = ou - chave, respectivamente. Defina o novo tamanho da janela do jogo com base no nível de zoom atual. Para fazer isso, adicione o seguinte código dentro do loop de eventos que manipula as entradas do teclado:

se event.type == pygame. TECLA PARA BAIXO:
se event.key == pygame. K_EQUALS:
ampliar += 0.1

tela = pygame.display.set_mode((
int (WINDOW_WIDTH * zoom),
int (WINDOW_HEIGHT * zoom)
))
elif event.key == pygame. K_MENOS:
zoom -= 0.1

se zoom < 0.1:
zoom = 0.1

tela = pygame.display.set_mode((
int (WINDOW_WIDTH * zoom),
int (WINDOW_HEIGHT * zoom)
))

Com o código acima, você adicionou com sucesso um efeito de zoom de câmera ao nosso jogo PyGame. Ao combinar esse recurso com o efeito de rolagem da câmera, você pode criar uma experiência de jogo dinâmica e envolvente.

Melhorando a jogabilidade com movimentos de câmera

Adicionar uma câmera de rolagem a um jogo PyGame não apenas aprimora a experiência visual, mas também melhora a jogabilidade. Ele permite que o jogador veja mais do mundo do jogo, proporcionando-lhe uma melhor compreensão de seus arredores e facilitando a navegação.

Você também pode usar o movimento da câmera para criar efeitos especiais, como aumentar e diminuir o zoom ou sacudir a tela para simular explosões ou terremotos.