Tanuld meg, hogyan modellezhetsz olyan kamerát, amely képes pásztázni a játékvilágodban, hogy valósághűséget és funkcionalitást adjon.

Az egyik közös jellemző, amelyet sok játékban talál, a görgető kamera, amely követi Önt, ahogy mozog a játék világában. Ez a hatás mélységet és valósághűséget adhat a játékhoz, és javíthatja az általános játékélményt.

A görgető kamera PyGame-ben számos különböző módon valósítható meg, ezért győződjön meg arról, hogy megértette a különbségeket.

Egyszerű játék létrehozása

Kezdés előtt, telepítse a pip-t a készülékére és használja az alábbi parancsot a PyGame modul telepítéséhez:

pip install pygame

Most létrehozhat egy egyszerű játékot egy játékos téglalappal és két statikus platformmal. A játékos balra és jobbra mozoghat a nyílbillentyűkkel.

Ebben megtalálja a projekt teljes kódját GitHub repó.

Kezdje a pygame modul importálásával. Ezután inicializálja, és a segítségével hozza létre a játékablakot pygame.display.set_mode() funkció. Ezután állítsa be az ablak feliratát, és hozza létre a óra objektum a képkockasebesség kezeléséhez.

instagram viewer
import pygame

pygame.init()

WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600

képernyő = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))

pygame.display.set_caption("Az én egyszerű játékom")

óra = pygame.time. Óra()

BACKGROUND_COLOR = (255, 255, 255)

Ezután állítsa be a lejátszót és a statikus platformokat. Határozza meg a játékos méretét és kezdeti pozícióját.

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)

rectangle_1 = pygame. Rect(200, 200, 100, 100)
rectangle_2 = pygame. Rect(500, 300, 150, 50)

Ezután hozzon létre egy játékhurkot, amely kezeli az eseményeket és frissíti a képernyőt. A hurok során keressen olyan eseményeket, mint például a játékból való kilépés vagy a játékos áthelyezése a nyílbillentyűkkel.

mígIgaz:
# Kezelje az eseményeket
számára esemény ban ben pygame.event.get():
ha event.type == pygame. KILÉPÉS:
pygame.quit()
Kilépés()

# Rajzolja meg a hátteret
screen.fill (BACKGROUND_COLOR)

# Rajzolja meg a statikus téglalapokat
pygame.draw.rect (képernyő, RECTANGLE_COLOR_1, rectangle_1)
pygame.draw.rect (képernyő, RECTANGLE_COLOR_2, rectangle_2)

# Rajzold le a játékost
player_rect = pygame. Rect (player_x, player_y, PLAYER_WIDTH,
PLAYER_HEIGHT)

pygame.draw.rect (képernyő, (0, 0, 0), játékos_helyes)

# Frissítse a kijelzőt
pygame.display.update()

# Korlátozza a képkockasebességet
clock.tick(30)

A kamera beállítása

Most, hogy van egy egyszerű játékod egy játékos téglalappal és két statikus platformmal, elkezdhet dolgozni a kamerán. A PyGame-ben a kamera lényegében csak egy eltolás, amely a képernyőre rajzolt összes objektumra hat. Ez azt jelenti, hogy ha balra mozgatja a kamerát, a képernyőn minden jobbra mozdul.

A kamera beállításához először meg kell határoznia egy változót a kamera X-eltolásának megőrzésére. Hívja ezt a változót camera_offset_x és inicializálja 0-ra.

# Állítsa be a kamera eltolását
camera_offset_x = 0

Ezután frissítse a képernyőre rajzolt összes objektum pozícióját, hogy figyelembe vegye a kamera eltolását. Ezt úgy teheti meg, hogy hozzáadja a camera_offset_x értéket az egyes objektumok X pozíciójához. Például a következőképpen frissítheti a játékos pozícióját:

# Rajzold le a játékost
player_rect = pygame. Rect (player_x + camera_offset_x, player_y, PLAYER_WIDTH,
PLAYER_HEIGHT)

pygame.draw.rect (képernyő, (0, 0, 0), játékos_helyes)

Hasonlóképpen frissítheti a statikus platformok pozícióit az alábbiak szerint:

# Rajzolja meg a statikus téglalapokat
rectangle_1_draw_pos = rectangle_1.move (camera_offset_x, 0)
pygame.draw.rect (képernyő, RECTANGLE_COLOR_1, rectangle_1_draw_pos)

rectangle_2_draw_pos = rectangle_2.move (camera_offset_x, 0)
pygame.draw.rect (képernyő, RECTANGLE_COLOR_2, rectangle_2_draw_pos)

A kamera mozgatása billentyűzet bemenetekkel

Most, hogy beállította a kamerát, elkezdheti mozgatni. Ennek egyik módja a kamera mozgatása a billentyűzet bemeneteire reagálva. Például a kamerát balra mozgathatja, amikor a lejátszó megnyomja a bal nyílbillentyűt.

Ehhez adja hozzá a következő kódot a billentyűzet bemeneteit kezelő eseményhurokba:

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

Egy másik módszer a lejátszó x koordinátájának megváltoztatása a billentyűzet megnyomásával, majd a kamera eltolás frissítése. Ezt így valósíthatja meg:

# Kezelje az eseményeket
számára esemény ban ben pygame.event.get():
ha event.type == pygame. KILÉPÉS:
pygame.quit()
Kilépés()

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

Ezután frissítheti a kamera eltolását a lejátszó x koordinátájához képest az alábbiak szerint:

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

A kamera mozgatása egérbemenetekkel

A kamera mozgatásának másik módja az egér használata. Engedélyezheti, hogy a lejátszó körbehúzza a képernyőt az egér kattintásával és húzásával.

Ehhez kövesse az egér helyzetét, amikor a lejátszó megnyomja a bal egérgombot. Amikor mozgatják az egeret, frissítse a játékos x koordinátáját. Meg kell változnia az egér aktuális pozíciója és a követett kezdeti pozíció közötti különbséggel, mouse_start_pos.

# Kezelje az eseményeket
számára esemény ban ben pygame.event.get():
ha event.type == pygame. KILÉPÉS:
pygame.quit()
Kilépés()

ha event.type == pygame. MOUSE GOMB LE:
ha esemény.gomb == 1:
mouse_start_pos = pygame.mouse.get_pos()

ha event.type == pygame. MOUSEMOTION:
ha pygame.mouse.get_pressed()[0]:
mouse_current_pos = pygame.mouse.get_pos()
mouse_offset_x = egér_aktuális_pozíciója[0] - mouse_start_pos[0]
player_x -= egér_eltolás_x
mouse_start_pos = mouse_current_pos

További kamerafunkciók hozzáadása

A görgető kameraeffektuson kívül számos más, kamerával kapcsolatos funkciót is hozzáadhat a játékélmény fokozása érdekében. Az egyik ilyen funkció a zoom kameraeffektus, amely lehetővé teszi a játékos számára a játék világának nagyítását vagy kicsinyítését. Ezt a hatást a játékablak méretének megváltoztatásával és a képernyőre rajzolt objektumok méretezésével érheti el.

Ehhez adjon meg egy nagyítási változót, amely tárolja a játék aktuális nagyítási szintjét. Állítsa a kezdeti értékét 1,0-ra, ami azt jelenti, hogy nincs nagyítás. Ezután definiáljon egy függvényt, amely az aktuális nagyítási szint alapján kiszámítja egy objektum méretarányos méretét.

zoom = 1.0

defget_scaled_size(méret):
Visszatérés int (méret * zoom)

Ezután frissítse a képernyőre rajzolt objektumok helyzetét és méretét a segítségével get_scaled_size funkció. Például a következőképpen módosíthatja a játékos pozícióját és méretét:

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

Hasonlóképpen frissítse a statikus platformok helyzetét és méretét az alábbiak szerint:

rectangle_1_draw_pos = pygame. Rect(
get_scaled_size (téglalap_1.x + camera_offset_x),
get_scaled_size (téglalap_1.y),
get_scaled_size (téglalap_1.szélesség),
get_scaled_size (téglalap_1.magasság)
)

pygame.draw.rect (képernyő, RECTANGLE_COLOR_1, rectangle_1_draw_pos)

rectangle_2_draw_pos = pygame. Rect(
get_scaled_size (téglalap_2.x + camera_offset_x),
get_scaled_size (téglalap_2.y),
get_scaled_size (téglalap_2.szélesség),
get_scaled_size (téglalap_2.magasság)
)

pygame.draw.rect (képernyő, RECTANGLE_COLOR_2, rectangle_2_draw_pos)

Növelje vagy csökkentse a nagyítási szintet 0,1-gyel, amikor a lejátszó megnyomja a gombot = vagy - gombot, ill. Állítsa be a játékablak új méretét az aktuális nagyítási szint alapján. Ehhez adja hozzá a következő kódot a billentyűzet bemeneteit kezelő eseményhurokba:

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

képernyő = pygame.display.set_mode((
int (WINDOW_WIDTH * nagyítás),
int (WINDOW_HEIGHT * nagyítás)
))
elif event.key == pygame. K_MINUS:
zoom -= 0.1

ha zoom < 0.1:
zoom = 0.1

képernyő = pygame.display.set_mode((
int (WINDOW_WIDTH * nagyítás),
int (WINDOW_HEIGHT * nagyítás)
))

A fenti kóddal sikeresen hozzáadott egy zoom kameraeffektust PyGame játékunkhoz. Ha ezt a funkciót a görgető kameraeffektussal kombinálja, dinamikus és lebilincselő játékélményt teremthet.

A játékmenet javítása kameramozgással

Görgető kamera hozzáadása a PyGame játékhoz nemcsak a vizuális élményt javítja, hanem a játékmenetet is. Lehetővé teszi a játékos számára, hogy többet lásson a játék világából, így jobban megértheti környezetét, és könnyebben navigálhat.

A kamera mozgatásával speciális effektusokat is létrehozhat, például nagyítást és kicsinyítést, vagy a képernyő megrázását robbanások vagy földrengések szimulálásához.