Siit saate teada, kuidas modelleerida kaamerat, mis suudab teie mängumaailmas panoraamida, et lisada realistlikkust ja funktsionaalsust.

Üks levinud funktsioon, mille leiate paljudest mängudest, on keriv kaamera, mis jälgib teid mängumaailmas liikumisel. See efekt võib teie mängule sügavust ja realistlikkust lisada ning üldist mängukogemust parandada.

Keriva kaamera rakendamiseks PyGame'is on palju erinevaid viise, seega veenduge, et mõistate nende erinevusi.

Lihtsa mängu loomine

Enne alustamist installige oma seadmesse pip ja kasutage PyGame mooduli installimiseks allolevat käsku:

pip install pygame

Nüüd saate luua lihtsa mängu mängija ristküliku ja kahe staatilise platvormiga. Mängija saab nooleklahvide abil liikuda vasakule ja paremale.

Siit leiate projekti täieliku koodi GitHubi repo.

Alustage pygame'i mooduli importimisega. Seejärel lähtestage see ja looge mänguaken, kasutades nuppu pygame.display.set_mode() funktsiooni. Seejärel määrake akna pealkiri ja looge kellaobjekt kaadrisageduse haldamiseks.

instagram viewer
importida pygame

pygame.init()

WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600

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

pygame.display.set_caption("Minu lihtne mäng")

kell = pygame.time. Kell ()

BACKGROUND_COLOR = (255, 255, 255)

Järgmisena seadistage mängija ja staatilised platvormid. Määrake mängija suurus ja algpositsioon.

PLAYER_WIDTH = 50
PLAYER_HEIGHT = 50

mängija_x = WINDOW_WIDTH // 2 - PLAYER_WIDTH // 2
mängija_y = WINDOW_HEIGHT – PLAYER_HEIGHT – 20

PLAYER_SPEED = 10

RECTANGLE_COLOR_1 = (255, 0, 0)
RECTANGLE_COLOR_2 = (0, 0, 255)

ristkülik_1 = mängumäng. Rect(200, 200, 100, 100)
ristkülik_2 = mängumäng. Rect(500, 300, 150, 50)

Seejärel looge mängusilmus, mis käsitleb sündmusi ja värskendab ekraani. Silmuses kontrollige sündmusi, nagu mängust väljumine või mängija liigutamine nooleklahvide abil.

samal ajalTõsi:
# Juhtige sündmusi
jaoks sündmus sisse pygame.event.get():
kui event.type == mängumäng. VÄLJA:
pygame.quit()
lõpeta ()

# Joonistage taust
screen.fill (BACKGROUND_COLOR)

# Joonistage staatilised ristkülikud
pygame.draw.rect (ekraan, RECTANGLE_COLOR_1, rectangle_1)
pygame.draw.rect (ekraan, RECTANGLE_COLOR_2, rectangle_2)

# Joonistage mängija
player_rect = mängumäng. Otse (mängija_x, mängija_y, PLAYER_WIDTH,
PLAYER_HEIGHT)

pygame.draw.rect (ekraan, (0, 0, 0), mängija_õige)

# Värskendage ekraani
pygame.display.update()

# Piirake kaadrisagedust
kell.tikk(30)

Kaamera seadistamine

Nüüd, kui teil on lihtne mäng mängija ristküliku ja kahe staatilise platvormiga, võite hakata kaameraga töötama. PyGame'is on kaamera sisuliselt lihtsalt nihe, mis mõjutab kõiki objekte, mille te ekraanile joonistate. See tähendab, et kui liigutate kaamerat vasakule, siis näib, et kõik ekraanil olev liigub paremale.

Kaamera seadistamiseks peate esmalt defineerima muutuja, mis hoiab kaamera X-nihet. Kutsu seda muutujat kaamera_nihe_x ja lähtestage see 0-ks.

# Määrake kaamera nihe
camera_offset_x = 0

Järgmisena värskendage kõigi ekraanile joonistatavate objektide asukohti, et võtta arvesse kaamera nihet. Seda saate teha, lisades kaamera_nihe_x väärtus iga objekti X-positsioonile. Näiteks saate mängija positsiooni värskendada järgmiselt:

# Joonistage mängija
player_rect = mängumäng. Rect (pleier_x + camera_offset_x, player_y, PLAYER_WIDTH,
PLAYER_HEIGHT)

pygame.draw.rect (ekraan, (0, 0, 0), mängija_õige)

Samamoodi saate staatiliste platvormide asukohti värskendada järgmiselt.

# Joonistage staatilised ristkülikud
rectangle_1_draw_pos = rectangle_1.move (kaamera_nihe_x, 0)
pygame.draw.rect (ekraan, RECTANGLE_COLOR_1, rectangle_1_draw_pos)

rectangle_2_draw_pos = rectangle_2.move (kaamera_nihe_x, 0)
pygame.draw.rect (ekraan, RECTANGLE_COLOR_2, rectangle_2_draw_pos)

Kaamera liigutamine klaviatuuri sisenditega

Nüüd, kui olete kaamera seadistanud, võite hakata seda liigutama. Üks võimalus seda teha on liigutada kaamerat vastuseks klaviatuuri sisenditele. Näiteks saate liigutada kaamerat vasakule, kui mängija vajutab vasaknooleklahvi.

Selleks lisage klaviatuurisisendeid haldavasse sündmusetsüklisse järgmine kood:

kui event.type == mängumäng. KEYDOWN:
kui event.key == mängumäng. K_LEFT:
camera_offset_x -= PLAYER_SPEED
elif event.key == mängumäng. K_RIGHT:
camera_offset_x += PLAYER_SPEED

Teine võimalus on muuta mängija x-koordinaati klaviatuurivajutusega ja seejärel värskendada kaamera nihet. Saate seda rakendada järgmiselt:

# Juhtige sündmusi
jaoks sündmus sisse pygame.event.get():
kui event.type == mängumäng. VÄLJA:
pygame.quit()
lõpeta ()

kui event.type == mängumäng. KEYDOWN:
kui event.key == mängumäng. K_LEFT:
mängija_x -= MÄNGIJA_KIIRUS
elif event.key == mängumäng. K_RIGHT:
mängija_x += PLAYER_SPEED

Seejärel saate värskendada kaamera nihet mängija x-koordinaadi suhtes järgmiselt.

camera_offset_x = WINDOW_WIDTH // 2 - mängija_x - PLAYER_WIDTH // 2

Kaamera liigutamine hiire sisenditega

Teine võimalus kaamera liigutamiseks on kasutada hiirt. Saate lubada mängijal ekraani lohistada, klõpsates ja lohistades hiirt.

Selleks jälgige hiire asendit, kui mängija vajutab hiire vasakut nuppu. Kui nad liigutavad hiirt, värskendage mängija x-koordinaati. See peaks muutuma hiire praeguse asukoha ja jälgitava algse asukoha erinevuse võrra, mouse_start_pos.

# Juhtige sündmusi
jaoks sündmus sisse pygame.event.get():
kui event.type == mängumäng. VÄLJA:
pygame.quit()
lõpeta ()

kui event.type == mängumäng. HIIRENUPP ALLA:
kui event.button == 1:
mouse_start_pos = pygame.mouse.get_pos()

kui event.type == mängumäng. MOUSE MOTION:
kui pygame.mouse.get_pressed()[0]:
mouse_current_pos = pygame.mouse.get_pos()
mouse_offset_x = hiire_praegune_positsioon[0] - hiire_alguse_positsioon[0]
mängija_x -= hiire_nihe_x
mouse_start_pos = mouse_current_pos

Kaamera lisafunktsioonide lisamine

Lisaks keritavale kaameraefektile saate mängukogemuse täiustamiseks lisada mitmeid muid kaameraga seotud funktsioone. Üks selline funktsioon on suumiv kaameraefekt, mis võimaldab mängijal mängumaailma sisse või välja suumida. Selle efekti saate saavutada, muutes mänguakna suurust ja skaleerides ekraanile joonistatud objekte.

Selleks määrake suumimuutuja, mis salvestab mängu praeguse suumitaseme. Määrake selle algväärtuseks 1,0, mis tähendab suumi puudumist. Seejärel määrake funktsioon, mis arvutab objekti skaleeritud suuruse praeguse suumitaseme alusel.

suum = 1.0

defget_scaled_size(suurus):
tagasi int (suurus * suum)

Järgmisena värskendage ekraanile joonistatud objektide asukohti ja suurusi, kasutades nuppu get_scaled_size funktsiooni. Näiteks saate mängija asukohta ja suurust värskendada järgmiselt.

player_rect = mängumäng. Rect(
get_scaled_size (pleier_x + camera_offset_x),
get_scaled_size (player_y),
get_scaled_size (PLAYER_WIDTH),
get_scaled_size (PLAYER_HEIGHT)
)

Samamoodi värskendage staatiliste platvormide asukohti ja suurusi järgmiselt.

rectangle_1_draw_pos = mängumäng. Rect(
get_scaled_size (ristkülik_1.x + camera_offset_x),
get_scaled_size (ristkülik_1.y),
get_scaled_size (ristkülik_1.laius),
get_scaled_size (ristkülik_1.kõrgus)
)

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

rectangle_2_draw_pos = mängumäng. Rect(
get_scaled_size (ristkülik_2.x + camera_offset_x),
get_scaled_size (ristkülik_2.y),
get_scaled_size (ristkülik_2.laius),
get_scaled_size (ristkülik_2.kõrgus)
)

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

Suurendage või vähendage suumitaset 0,1 võrra, kui mängija vajutab nuppu = või - klahvi vastavalt. Määrake mänguakna uus suurus praeguse suumitaseme alusel. Selleks lisage klaviatuurisisendeid haldavasse sündmusetsüklisse järgmine kood:

kui event.type == mängumäng. KEYDOWN:
kui event.key == mängumäng. K_EQUALS:
suum += 0.1

ekraan = pygame.display.set_mode((
int (WINDOW_WIDTH * suum),
int (WINDOW_HEIGHT * suum)
))
elif event.key == mängumäng. K_MIINUS:
suum -= 0.1

kui suumi < 0.1:
suum = 0.1

ekraan = pygame.display.set_mode((
int (WINDOW_WIDTH * suum),
int (WINDOW_HEIGHT * suum)
))

Ülaltoodud koodiga olete edukalt lisanud meie PyGame mängu suumikaamera efekti. Kombineerides selle funktsiooni keriva kaameraefektiga, saate luua dünaamilise ja kaasahaarava mängukogemuse.

Mängu täiustamine kaamera liigutustega

Keriva kaamera lisamine PyGame'i mängule mitte ainult ei paranda visuaalset kogemust, vaid parandab ka mängulisust. See võimaldab mängijal näha rohkem mängumaailma, pakkudes neile paremat arusaamist ümbritsevast ja hõlbustades navigeerimist.

Kaamera liigutamise abil saate luua ka eriefekte, nagu sisse- ja väljasuumimine või ekraani raputamine, et simuleerida plahvatusi või maavärinaid.