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.
import pygame
pygame.init()
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600ké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 = 50player_x = WINDOW_WIDTH // 2 - PLAYER_WIDTH // 2
player_y = WINDOW_HEIGHT - PLAYER_HEIGHT - 20PLAYER_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.1ké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.1ha 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.