Naučte sa, ako modelovať kameru, ktorá dokáže posúvať váš herný svet a pridať jej realizmus a funkčnosť.

Jednou zo spoločných funkcií, ktoré nájdete v mnohých hrách, je rolovacia kamera, ktorá vás sleduje, keď sa pohybujete po hernom svete. Tento efekt môže vašej hre pridať hĺbku a realizmus a zlepšiť celkový zážitok z hry.

Existuje mnoho rôznych spôsobov, ako implementovať rolovaciu kameru v PyGame, takže sa uistite, že rozumiete ich rozdielom.

Vytvorenie jednoduchej hry

Pred spustením nainštalujte pip do svojho zariadenia a pomocou nižšie uvedeného príkazu nainštalujte modul PyGame:

pip install pygame

Teraz si môžete vytvoriť jednoduchú hru s hráčskym obdĺžnikom a dvoma statickými platformami. Hráč sa môže pohybovať doľava a doprava pomocou kláves so šípkami.

Kompletný kód projektu nájdete v tomto Úložisko GitHub.

Začnite importovaním modulu pygame. Potom ho inicializujte a vytvorte okno hry pomocou pygame.display.set_mode() funkciu. Potom nastavte titulok okna a vytvorte súbor objekt hodín na správu snímkovej frekvencie.

instagram viewer
importovať pygame

pygame.init()

WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600

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

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

hodiny = pygame.time. hodiny()

BACKGROUND_COLOR = (255, 255, 255)

Ďalej nastavte prehrávač a statické platformy. Definujte veľkosť prehrávača a jeho počiatočnú polohu.

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ĺžnik_1 = pygame. Rect(200, 200, 100, 100)
obdĺžnik_2 = pygame. Rect(500, 300, 150, 50)

Potom vytvorte hernú slučku, ktorá spracováva udalosti a aktualizuje obrazovku. V slučke skontrolujte udalosti, ako je ukončenie hry alebo pohyb hráča pomocou klávesov so šípkami.

zatiaľ čoPravda:
# Zvládnite udalosti
pre udalosť v pygame.event.get():
ak event.type == pygame. UKONČIŤ:
pygame.quit()
skončiť ()

# Nakreslite pozadie
screen.fill (BACKGROUND_COLOR)

# Nakreslite statické obdĺžniky
pygame.draw.rect (obrazovka, RECTANGLE_COLOR_1, obdĺžnik_1)
pygame.draw.rect (obrazovka, RECTANGLE_COLOR_2, obdĺžnik_2)

# Nakreslite prehrá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()

# Obmedzte snímkovú frekvenciu
clock.tick(30)

Nastavenie fotoaparátu

Teraz, keď máte jednoduchú hru s hráčskym obdĺžnikom a dvoma statickými platformami, môžete začať pracovať na kamere. V PyGame je kamera v podstate len posun, ktorý pôsobí na všetky objekty, ktoré nakreslíte na obrazovku. To znamená, že ak posuniete kameru doľava, všetko na obrazovke sa bude pohybovať doprava.

Ak chcete nastaviť fotoaparát, musíte najprv definovať premennú, ktorá bude držať X offset fotoaparátu. Zavolajte túto premennú camera_offset_x a inicializujte ho na 0.

# Nastavte odsadenie fotoaparátu
camera_offset_x = 0

Potom aktualizujte polohy všetkých objektov, ktoré nakreslíte na obrazovku, aby sa zohľadnil posun kamery. Môžete to urobiť pridaním camera_offset_x hodnotu k polohe X každého objektu. Pozíciu hráča môžete aktualizovať napríklad takto:

# Nakreslite prehrávač
player_rect = pygame. Rect (player_x + camera_offset_x, player_y, PLAYER_WIDTH,
PLAYER_HEIGHT)

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

Podobne môžete aktualizovať pozície statických platforiem takto:

# Nakreslite statické obdĺžniky
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)

Presúvanie fotoaparátu pomocou klávesových vstupov

Teraz, keď máte kameru nastavenú, môžete ju začať presúvať. Jedným zo spôsobov, ako to urobiť, je posunúť kameru v reakcii na vstupy z klávesnice. Napríklad môžete posunúť kameru doľava, keď hráč stlačí kláves so šípkou doľava.

Ak to chcete urobiť, pridajte nasledujúci kód do slučky udalostí, ktorá spracováva vstupy z klávesnice:

ak event.type == pygame. KEYDOWN:
ak event.key == pygame. K_LEFT:
camera_offset_x -= PLAYER_SPEED
elif event.key == pygame. K_RIGHT:
camera_offset_x += PLAYER_SPEED

Ďalším spôsobom je zmeniť súradnicu x hráča na stlačení klávesnice a potom aktualizovať offset kamery. Môžete to implementovať takto:

# Zvládnite udalosti
pre udalosť v pygame.event.get():
ak event.type == pygame. UKONČIŤ:
pygame.quit()
skončiť ()

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

Potom môžete aktualizovať posun kamery vzhľadom na súradnicu x hráča takto:

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

Presúvanie fotoaparátu pomocou vstupov pre myš

Ďalším spôsobom pohybu kamery je použitie myši. Prehrávačovi môžete povoliť ťahanie obrazovky kliknutím a ťahaním myšou.

Ak to chcete urobiť, sledujte polohu myši, keď hráč stlačí ľavé tlačidlo myši. Keď pohnú myšou, aktualizujte hráčovu súradnicu x. Mala by sa zmeniť o rozdiel medzi aktuálnou pozíciou myši a počiatočnou pozíciou, ktorú ste sledovali, mouse_start_pos.

# Zvládnite udalosti
pre udalosť v pygame.event.get():
ak event.type == pygame. UKONČIŤ:
pygame.quit()
skončiť ()

ak event.type == pygame. Tlačidlo myši:
ak udalosť.tlačidlo == 1:
mouse_start_pos = pygame.mouse.get_pos()

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

Pridanie ďalších funkcií fotoaparátu

Okrem rolovacieho efektu kamery môžete pridať niekoľko ďalších funkcií súvisiacich s kamerou na zlepšenie herného zážitku. Jednou z takýchto funkcií je efekt priblíženia kamery, ktorý umožňuje hráčovi priblížiť alebo oddialiť herný svet. Tento efekt môžete dosiahnuť zmenou veľkosti herného okna a zmenou mierky objektov nakreslených na obrazovke.

Ak to chcete urobiť, definujte premennú priblíženia, ktorá bude uchovávať aktuálnu úroveň priblíženia hry. Nastavte jeho počiatočnú hodnotu na 1,0, čo predstavuje žiadne priblíženie. Potom definujte funkciu, ktorá vypočíta zmenšenú veľkosť objektu na základe aktuálnej úrovne priblíženia.

zoom = 1.0

defget_scaled_size(veľkosť):
vrátiť int (veľkosť * priblíženie)

Potom aktualizujte polohy a veľkosti objektov nakreslených na obrazovke pomocou get_scaled_size funkciu. Pozíciu a veľkosť prehrávača môžete aktualizovať naprí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)
)

Podobne aktualizujte pozície a veľkosti statických platforiem takto:

rectangle_1_draw_pos = pyhra. Rect(
get_scaled_size (obdĺžnik_1.x + camera_offset_x),
get_scaled_size (obdĺžnik_1.y),
get_scaled_size (rectangle_1.width),
get_scaled_size (rectangle_1.height)
)

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

rectangle_2_draw_pos = pyhra. Rect(
get_scaled_size (obdĺžnik_2.x + camera_offset_x),
get_scaled_size (obdĺžnik_2.y),
get_scaled_size (rectangle_2.width),
get_scaled_size (rectangle_2.height)
)

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

Zvýšte alebo znížte úroveň priblíženia o 0,1, keď hráč stlačí tlačidlo = alebo - kľúč, resp. Nastavte novú veľkosť herného okna na základe aktuálnej úrovne priblíženia. Ak to chcete urobiť, pridajte nasledujúci kód do slučky udalostí, ktorá spracováva vstupy z klávesnice:

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

obrazovka = pygame.display.set_mode((
int (WINDOW_WIDTH * priblíženie),
int (WINDOW_HEIGHT * priblíženie)
))
elif event.key == pygame. K_MINUS:
zoom -= 0.1

ak priblížiť < 0.1:
zoom = 0.1

obrazovka = pygame.display.set_mode((
int (WINDOW_WIDTH * priblíženie),
int (WINDOW_HEIGHT * priblíženie)
))

S vyššie uvedeným kódom ste úspešne pridali efekt priblíženia kamery do našej hry PyGame. Kombináciou tejto funkcie s efektom rolujúcej kamery môžete vytvoriť dynamický a pútavý herný zážitok.

Zlepšenie hrateľnosti pomocou pohybov kamery

Pridanie rolovacej kamery do hry PyGame nielen vylepšuje vizuálny zážitok, ale zlepšuje aj hrateľnosť. Umožňuje hráčovi vidieť viac z herného sveta, poskytuje mu lepšie pochopenie okolia a uľahčuje navigáciu.

Pohyb kamery môžete použiť aj na vytváranie špeciálnych efektov, ako je približovanie a odďaľovanie alebo trasenie obrazovky na simuláciu výbuchov alebo zemetrasení.