Dowiedz się, jak modelować kamerę, która może przesuwać się po świecie gry, aby dodać realizmu i funkcjonalności.

Wspólną cechą wielu gier jest przewijana kamera, która podąża za Tobą, gdy poruszasz się po świecie gry. Ten efekt może dodać głębi i realizmu do twojej gry i poprawić ogólne wrażenia z gry.

Istnieje wiele różnych sposobów implementacji przewijanej kamery w PyGame, więc upewnij się, że rozumiesz różnice między nimi.

Tworzenie prostej gry

Przed rozpoczęciem, zainstaluj pip na swoim urządzeniu i użyj poniższego polecenia, aby zainstalować moduł PyGame:

pip zainstaluj pygame

Teraz możesz stworzyć prostą grę z prostokątem gracza i dwiema statycznymi platformami. Gracz może poruszać się w lewo iw prawo za pomocą klawiszy strzałek.

Możesz znaleźć pełny kod projektu w this Repozytorium GitHub.

Zacznij od zaimportowania modułu pygame. Następnie zainicjuj go i utwórz okno gry za pomocą pygame.display.set_mode() funkcjonować. Następnie ustaw podpis okna i utwórz obiekt zegara do zarządzania liczbą klatek na sekundę.

instagram viewer
import pygame

pygame.init()

WINDOW_WIDTH = 800
WYSOKOŚĆ_OKNA = 600

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

pygame.display.set_caption(„Moja prosta gra”)

zegar = pygame.czas. Zegar()

KOLOR_TŁA = (255, 255, 255)

Następnie skonfiguruj odtwarzacz i platformy statyczne. Zdefiniuj rozmiar zawodnika i jego początkową pozycję.

PLAYER_WIDTH = 50
WYSOKOŚĆ_GRACZA = 50

gracz_x = SZEROKOŚĆ_OKNA // 2 - PLAYER_WIDTH // 2
gracz_y = WYSOKOŚĆ_OKNA - WYSOKOŚĆ_GRACZA - 20

PRĘDKOŚĆ_GRACZA = 10

PROSTOKĄT_KOLOR_1 = (255, 0, 0)
PROSTOKĄT_KOLOR_2 = (0, 0, 255)

prostokąt_1 = gra. prostokąt(200, 200, 100, 100)
prostokąt_2 = gra. prostokąt(500, 300, 150, 50)

Następnie utwórz pętlę gry, która obsługuje zdarzenia i aktualizuje ekran. W pętli sprawdzaj zdarzenia, takie jak wyjście z gry lub przesunięcie gracza za pomocą klawiszy strzałek.

chwilaPRAWDA:
# Obsługuj zdarzenia
Do wydarzenie W pygame.event.get():
Jeśli event.type == pygame. ZREZYGNOWAĆ:
pygame.quit()
zrezygnować()

# Narysuj tło
ekran.wypełnienie (BACKGROUND_COLOR)

# Narysuj statyczne prostokąty
pygame.draw.rect (ekran, RECTANGLE_COLOR_1, prostokąt_1)
pygame.draw.rect (ekran, RECTANGLE_COLOR_2, prostokąt_2)

# Narysuj gracza
player_rect = pygame. Prostokąt (gracz_x, gracz_y, PLAYER_WIDTH,
PLAYER_HEIGHT)

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

# Zaktualizuj wyświetlacz
pygame.display.update()

# Ogranicz liczbę klatek na sekundę
zegar.tik(30)

Konfigurowanie aparatu

Teraz, gdy masz już prostą grę z prostokątem gracza i dwiema statycznymi platformami, możesz przystąpić do pracy z kamerą. W PyGame kamera jest po prostu przesunięciem, które działa na wszystkie obiekty, które rysujesz na ekranie. Oznacza to, że jeśli przesuniesz kamerę w lewo, wszystko na ekranie będzie się przesuwać w prawo.

Aby skonfigurować kamerę, musisz najpierw zdefiniować zmienną do przechowywania przesunięcia X kamery. Wywołaj tę zmienną przesunięcie_kamery_x i zainicjuj go na 0.

# Ustaw przesunięcie kamery
przesunięcie_kamery_x = 0

Następnie zaktualizuj pozycje wszystkich obiektów rysowanych na ekranie, aby uwzględnić przesunięcie kamery. Możesz to zrobić, dodając tzw przesunięcie_kamery_x wartość do pozycji X każdego obiektu. Na przykład możesz zaktualizować pozycję gracza w następujący sposób:

# Narysuj gracza
player_rect = pygame. Prostokąt (gracz_x + przesunięcie_kamery_x, gracz_y, PLAYER_WIDTH,
PLAYER_HEIGHT)

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

Podobnie możesz zaktualizować pozycje platform statycznych w następujący sposób:

# Narysuj statyczne prostokąty
prostokąt_1_poz_rysowania = prostokąt_1.ruch (przesunięcie_kamery_x, 0)
pygame.draw.rect (ekran, PROSTOKĄT_KOLOR_1, prostokąt_1_narysuj_pos)

prostokąt_2_poz_rysowania = prostokąt_2.ruch (przesunięcie_kamery_x, 0)
pygame.draw.rect (ekran, RECTANGLE_COLOR_2, prostokąt_2_draw_pos)

Przesuwanie kamery za pomocą klawiatury

Teraz, gdy masz już skonfigurowaną kamerę, możesz zacząć ją przenosić. Jednym ze sposobów na to jest poruszanie kamerą w odpowiedzi na polecenia wprowadzane z klawiatury. Na przykład możesz przesunąć kamerę w lewo, gdy gracz naciśnie klawisz strzałki w lewo.

Aby to zrobić, dodaj następujący kod wewnątrz pętli zdarzeń, która obsługuje wprowadzanie z klawiatury:

Jeśli event.type == pygame. KLAWIATURA:
Jeśli event.key == pygame. K_LEWO:
camera_offset_x -= PRĘDKOŚĆ_GRACZA
Elif event.key == pygame. K_PRAWO:
camera_offset_x += PLAYER_SPEED

Innym sposobem jest zmiana współrzędnej x gracza na klawiaturze, a następnie aktualizacja przesunięcia kamery. Możesz zaimplementować to tak:

# Obsługuj zdarzenia
Do wydarzenie W pygame.event.get():
Jeśli event.type == pygame. ZREZYGNOWAĆ:
pygame.quit()
zrezygnować()

Jeśli event.type == pygame. KLAWIATURA:
Jeśli event.key == pygame. K_LEWO:
gracz_x -= PRĘDKOŚĆ_GRACZA
Elif event.key == pygame. K_PRAWO:
player_x += PLAYER_SPEED

Następnie możesz zaktualizować przesunięcie kamery względem współrzędnej x gracza w następujący sposób:

przesunięcie_kamery_x = SZEROKOŚĆ_OKNA // 2 - player_x - PLAYER_WIDTH // 2

Przesuwanie kamery za pomocą myszy

Innym sposobem poruszania kamerą jest użycie myszy. Możesz zezwolić graczowi na przeciąganie ekranu, klikając i przeciągając myszą.

Aby to zrobić, śledź pozycję myszy, gdy gracz naciska lewy przycisk myszy. Kiedy poruszają myszką, aktualizuj współrzędną x gracza. Powinien zmienić się o różnicę między bieżącą pozycją myszy a śledzoną pozycją początkową, pozycja_start_myszy.

# Obsługuj zdarzenia
Do wydarzenie W pygame.event.get():
Jeśli event.type == pygame. ZREZYGNOWAĆ:
pygame.quit()
zrezygnować()

Jeśli event.type == pygame. PRZYCISK MYSZY W DÓŁ:
Jeśli przycisk.zdarzenia == 1:
mouse_start_pos = pygame.mouse.get_pos()

Jeśli event.type == pygame. RUCH MYSZY:
Jeśli pygame.mouse.get_pressed()[0]:
mouse_current_pos = pygame.mouse.get_pos()
przesunięcie_myszy_x = położenie_bieżące_myszy[0] - mouse_start_pos[0]
gracz_x -= przesunięcie_myszy_x
pozycja_początkowa_myszy = pozycja_bieżąca_myszy

Dodawanie większej liczby funkcji aparatu

Oprócz efektu przewijanej kamery możesz dodać kilka innych funkcji związanych z kamerą, aby poprawić wrażenia z gry. Jedną z takich funkcji jest efekt kamery z zoomem, który pozwala graczowi przybliżać lub oddalać świat gry. Możesz osiągnąć ten efekt zmieniając rozmiar okna gry i skalując obiekty rysowane na ekranie.

Aby to zrobić, zdefiniuj zmienną powiększenia, która będzie przechowywać bieżący poziom powiększenia gry. Ustaw jego wartość początkową na 1,0, co oznacza brak powiększenia. Następnie zdefiniuj funkcję, która obliczy przeskalowany rozmiar obiektu na podstawie bieżącego poziomu powiększenia.

powiększenie = 1.0

pokget_scaled_size(rozmiar):
powrót int (rozmiar * powiększenie)

Następnie zaktualizuj pozycje i rozmiary obiektów rysowanych na ekranie za pomocą programu get_scaled_size funkcjonować. Na przykład możesz zaktualizować pozycję i rozmiar gracza w następujący sposób:

player_rect = pygame. prostokąt(
get_scaled_size (gracz_x + przesunięcie_kamery_x),
get_scaled_size (gracz_y),
get_scaled_size (PLAYER_WIDTH),
get_scaled_size (PLAYER_HEIGHT)
)

Podobnie zaktualizuj pozycje i rozmiary platform statycznych w następujący sposób:

prostokąt_1_draw_pos = pygame. prostokąt(
get_scaled_size (prostokąt_1.x + przesunięcie_kamery_x),
get_scaled_size (prostokąt_1.y),
get_scaled_size (prostokąt_1.szerokość),
get_scaled_size (rectangle_1.height)
)

pygame.draw.rect (ekran, PROSTOKĄT_KOLOR_1, prostokąt_1_narysuj_pos)

prostokąt_2_draw_pos = pygame. prostokąt(
get_scaled_size (prostokąt_2.x + przesunięcie_kamery_x),
get_scaled_size (prostokąt_2.y),
get_scaled_size (rectangle_2.width),
get_scaled_size (rectangle_2.height)
)

pygame.draw.rect (ekran, RECTANGLE_COLOR_2, prostokąt_2_draw_pos)

Zwiększ lub zmniejsz poziom powiększenia o 0,1, gdy gracz naciśnie przycisk = Lub - klucz, odpowiednio. Ustaw nowy rozmiar okna gry na podstawie bieżącego poziomu powiększenia. Aby to zrobić, dodaj następujący kod wewnątrz pętli zdarzeń, która obsługuje wprowadzanie z klawiatury:

Jeśli event.type == pygame. KLAWIATURA:
Jeśli event.key == pygame. K_RÓWNOŚCI:
powiększenie += 0.1

ekran = pygame.display.set_mode((
int (WINDOW_WIDTH * powiększenie),
int (WINDOW_HEIGHT * powiększenie)
))
Elif event.key == pygame. K_MINUS:
powiększenie -= 0.1

Jeśli powiększ < 0.1:
powiększenie = 0.1

ekran = pygame.display.set_mode((
int (WINDOW_WIDTH * powiększenie),
int (WINDOW_HEIGHT * powiększenie)
))

Za pomocą powyższego kodu pomyślnie dodałeś efekt powiększania kamery do naszej gry PyGame. Łącząc tę ​​funkcję z efektem przewijanej kamery, możesz stworzyć dynamiczną i wciągającą grę.

Poprawa rozgrywki dzięki ruchom kamery

Dodanie przewijanej kamery do gry PyGame nie tylko poprawia wrażenia wizualne, ale także poprawia rozgrywkę. Pozwala graczowi zobaczyć więcej świata gry, zapewniając mu lepsze zrozumienie otoczenia i ułatwiając nawigację.

Możesz także użyć ruchu kamery do tworzenia efektów specjalnych, takich jak powiększanie i pomniejszanie lub potrząsanie ekranem w celu symulacji wybuchów lub trzęsień ziemi.