Naučte se modelovat kameru, která se může pohybovat napříč vaším herním světem a dodávat jí realismus a funkčnost.

Jednou ze společných funkcí, kterou najdete v mnoha hrách, je rolovací kamera, která vás sleduje, když se pohybujete po herním světě. Tento efekt může vaší hře přidat hloubku a realismus a zlepšit celkový herní zážitek.

Existuje mnoho různých způsobů, jak implementovat rolovací kameru v PyGame, takže se ujistěte, že rozumíte jejich rozdílům.

Vytvoření jednoduché hry

Před začátkem, nainstalujte pip do svého zařízení a pomocí níže uvedeného příkazu nainstalujte modul PyGame:

pip nainstalovat pygame

Nyní můžete vytvořit jednoduchou hru s hracím obdélníkem a dvěma statickými platformami. Hráč se může pohybovat doleva a doprava pomocí kláves se šipkami.

Kompletní kód projektu najdete zde úložiště GitHub.

Začněte importem modulu pygame. Poté jej inicializujte a vytvořte herní okno pomocí pygame.display.set_mode() funkce. Poté nastavte titulek okna a vytvořte soubor objekt hodin pro správu snímkové frekvence.

instagram viewer
import pygame

pygame.init()

WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600

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

pygame.display.set_caption("Moje jednoduchá hra")

hodiny = pygame.time. Hodiny()

BACKGROUND_COLOR = (255, 255, 255)

Dále nastavte přehrávač a statické platformy. Definujte velikost přehrávače a jeho výchozí pozici.

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)

obdélník_1 = pygame. Rect(200, 200, 100, 100)
obdélník_2 = pygame. Rect(500, 300, 150, 50)

Poté vytvořte herní smyčku, která zpracovává události a aktualizuje obrazovku. Ve smyčce zkontrolujte události, jako je ukončení hry nebo pohyb hráče pomocí kláves se šipkami.

zatímcoSkutečný:
# Zvládněte události
pro událost v pygame.event.get():
-li event.type == pygame. PŘESTAT:
pygame.quit()
přestat()

# Nakreslete pozadí
screen.fill (BACKGROUND_COLOR)

# Nakreslete statické obdélníky
pygame.draw.rect (obrazovka, RECTANGLE_COLOR_1, obdélník_1)
pygame.draw.rect (obrazovka, RECTANGLE_COLOR_2, obdélník_2)

# Nakreslete přehrávač
player_rect = pygame. Rect (player_x, player_y, PLAYER_WIDTH,
PLAYER_HEIGHT)

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

# Aktualizujte displej
pygame.display.update()

# Omezte snímkovou frekvenci
hodiny.tikat(30)

Nastavení fotoaparátu

Nyní, když máte jednoduchou hru s hracím obdélníkem a dvěma statickými platformami, můžete začít pracovat na kameře. V PyGame je kamera v podstatě jen offset, který působí na všechny objekty, které kreslíte na obrazovku. To znamená, že pokud posunete kameru doleva, vše na obrazovce se bude pohybovat doprava.

Chcete-li nastavit kameru, musíte nejprve definovat proměnnou, která bude udržovat X offset kamery. Zavolejte tuto proměnnou camera_offset_x a inicializujte jej na 0.

# Nastavte odsazení fotoaparátu
camera_offset_x = 0

Dále aktualizujte pozice všech objektů, které nakreslíte na obrazovku, aby se zohlednil posun kamery. Můžete to udělat přidáním camera_offset_x hodnotu na pozici X každého objektu. Pozici hráče můžete aktualizovat například takto:

# Nakreslete přehrávač
player_rect = pygame. Obdélník (player_x + camera_offset_x, player_y, PLAYER_WIDTH,
PLAYER_HEIGHT)

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

Podobně můžete aktualizovat pozice statických platforem následovně:

# Nakreslete statické obdélníky
rectangle_1_draw_pos = rectangle_1.move (camera_offset_x, 0)
pygame.draw.rect (obrazovka, RECTANGLE_COLOR_1, rectangle_1_draw_pos)

rectangle_2_draw_pos = rectangle_2.move (camera_offset_x, 0)
pygame.draw.rect (obrazovka, RECTANGLE_COLOR_2, rectangle_2_draw_pos)

Přesouvání kamery pomocí klávesnicových vstupů

Nyní, když máte kameru nastavenou, můžete ji začít pohybovat. Jedním ze způsobů, jak toho dosáhnout, je pohyb kamery v reakci na vstupy z klávesnice. Například můžete posunout kameru doleva, když hráč stiskne klávesu se šipkou doleva.

Chcete-li to provést, přidejte do smyčky událostí, která zpracovává vstupy z klávesnice, následující kód:

-li event.type == pygame. KEYDOWN:
-li event.key == pygame. K_LEFT:
camera_offset_x -= RYCHLOST HRÁČE
elif event.key == pygame. K_RIGHT:
camera_offset_x += RYCHLOST HRÁČE

Dalším způsobem je změnit souřadnici x hráče na stisknutí klávesnice a poté aktualizovat offset kamery. Můžete to implementovat takto:

# Zvládněte události
pro událost v pygame.event.get():
-li event.type == pygame. PŘESTAT:
pygame.quit()
přestat()

-li event.type == pygame. KEYDOWN:
-li event.key == pygame. K_LEFT:
player_x -= PLAYER_SPEED
elif event.key == pygame. K_RIGHT:
player_x += PLAYER_SPEED

Poté můžete aktualizovat offset kamery vzhledem k souřadnici x hráče následovně:

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

Pohyb kamery se vstupy pro myš

Dalším způsobem pohybu kamery je použití myši. Můžete povolit přehrávači přetahovat obrazovku kliknutím a tažením myši.

Chcete-li to provést, sledujte polohu myši, když hráč stiskne levé tlačítko myši. Když pohnou myší, aktualizujte hráčovu souřadnici x. Mělo by se změnit o rozdíl mezi aktuální pozicí myši a počáteční pozicí, kterou jste sledovali, mouse_start_pos.

# Zvládněte události
pro událost v pygame.event.get():
-li event.type == pygame. PŘESTAT:
pygame.quit()
přestat()

-li event.type == pygame. MOUSEBUTTONDOWN:
-li tlačítko události == 1:
mouse_start_pos = pygame.mouse.get_pos()

-li event.type == pygame. MOUSEMOTION:
-li 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

Přidání dalších funkcí fotoaparátu

Kromě efektu posouvání kamery můžete přidat několik dalších funkcí souvisejících s kamerou, abyste zlepšili herní zážitek. Jednou z takových funkcí je efekt přibližování kamery, který umožňuje hráči přibližovat nebo oddalovat herní svět. Tohoto efektu můžete dosáhnout změnou velikosti herního okna a změnou měřítka objektů nakreslených na obrazovce.

Chcete-li to provést, definujte proměnnou přiblížení, která bude ukládat aktuální úroveň přiblížení hry. Nastavte jeho počáteční hodnotu na 1,0, což představuje žádné přiblížení. Poté definujte funkci, která vypočítá zmenšenou velikost objektu na základě aktuální úrovně přiblížení.

zoom = 1.0

defget_scaled_size(velikost):
vrátit se int (velikost * zoom)

Dále aktualizujte polohy a velikosti objektů nakreslených na obrazovce pomocí get_scaled_size funkce. Pozici a velikost přehrávače můžete aktualizovat například takto:

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)
)

Podobně aktualizujte pozice a velikosti statických platforem následovně:

rectangle_1_draw_pos = pygame. Rect(
get_scaled_size (obdélník_1.x + camera_offset_x),
get_scaled_size (obdélník_1.y),
get_scaled_size (rectangle_1.width),
get_scaled_size (obdélník_1.výška)
)

pygame.draw.rect (obrazovka, RECTANGLE_COLOR_1, rectangle_1_draw_pos)

rectangle_2_draw_pos = pygame. Rect(
get_scaled_size (obdélník_2.x + camera_offset_x),
get_scaled_size (obdélník_2.y),
get_scaled_size (rectangle_2.width),
get_scaled_size (obdélník_2.výška)
)

pygame.draw.rect (obrazovka, RECTANGLE_COLOR_2, rectangle_2_draw_pos)

Když hráč stiskne tlačítko, zvyšte nebo snižte úroveň přiblížení o 0,1 = nebo - klíč, resp. Nastavte novou velikost herního okna na základě aktuální úrovně přiblížení. Chcete-li to provést, přidejte do smyčky událostí, která zpracovává vstupy z klávesnice, následující kód:

-li event.type == pygame. KEYDOWN:
-li event.key == pygame. K_EQUALS:
zoom += 0.1

obrazovka = pygame.display.set_mode((
int (WINDOW_WIDTH * přiblížení),
int (WINDOW_HEIGHT * přiblížení)
))
elif event.key == pygame. K_MINUS:
zoom -= 0.1

-li zoom < 0.1:
zoom = 0.1

obrazovka = pygame.display.set_mode((
int (WINDOW_WIDTH * přiblížení),
int (WINDOW_HEIGHT * přiblížení)
))

Pomocí výše uvedeného kódu jste do naší hry PyGame úspěšně přidali efekt přiblížení kamery. Kombinací této funkce s efektem rolovací kamery můžete vytvořit dynamický a poutavý herní zážitek.

Zlepšení hry pomocí pohybů kamery

Přidání rolovací kamery do hry PyGame nejen vylepšuje vizuální zážitek, ale také zlepšuje hratelnost. Umožňuje hráči vidět více z herního světa, poskytuje mu lepší porozumění svému okolí a usnadňuje orientaci.

Pohyb kamery můžete také použít k vytvoření speciálních efektů, jako je přibližování a oddalování nebo třesení obrazovky pro simulaci výbuchů nebo zemětřesení.