Pygame-prosjekter som mangler animasjon kan være utrolig kjedelig. Forbedre appelleren til spillene dine ved å inkludere fengslende animasjoner.

Animasjon er et avgjørende aspekt ved spillutvikling som gir liv og dynamikk til kreasjonene dine. Ved å inkludere animasjoner kan du lage fengslende bilder og oppslukende spillopplevelser for spillerne dine.

Pygame gir et omfattende sett med verktøy som forenkler prosessen med å lage animasjoner. Den har innebygde funksjoner, inkludert lasting og visning av rammer, kontroll av animasjoner med spillerinndata, og så videre.

Lag et enkelt spill

Start med å lage et enkelt spill som lar spilleren bevege seg til venstre og høyre. Du kan også legge til en plattform til spillet.

Koden som brukes i denne artikkelen er tilgjengelig i denne GitHub-depot og er gratis for deg å bruke under MIT-lisensen.

Opprett en ny fil simple-game.py og definere noen variabler, inkludert startposisjonene og hastighetene for spilleren og plattformen. Disse variablene vil bli brukt til å kontrollere bevegelsen til spillerens sprite.

instagram viewer

Håndter spillerinndata ved å hente statusen til tastaturet ved å bruke pygame.key.get_pressed(). Hvis du trykker på venstre piltast, kan du redusere verdien av spiller_x, og hvis høyre piltast trykkes, kan du øke den. Dette skaper bevegelseseffekten for spillerens sprite.

Det første spillet ditt skal se slik ut:

Laster og viser rammer

For å lage animasjoner, laste og vise forskjellige bilder eller rammer av animasjonen. Hver ramme representerer et spesifikt bilde eller sprite som vil bli vist i en sekvens for å gi en illusjon av bevegelse. La oss anta at du har tre rammer: ramme0, ramme 1, og ramme 2. I utgangspunktet kan du vise ramme0.

Opprett en ny fil med navnet animate.py og legg til koden med oppdateringene nedenfor:


# Last rammer
frame0 = pygame. Flate((20, 20))
frame0.fill((255, 0, 0))

frame1 = pygame. Flate((20, 20))
frame1.fill((0, 255, 0))

frame2 = pygame. Flate((20, 20))
frame2.fill((0, 0, 255))

# Sett innledende ramme
gjeldende_ramme = ramme0

# Spillløkke
samtidig som løping:
# ...

# Gjengi spillet
# ...
screen.blit (current_frame, (player_x, player_y))

pygame.display.flip()

# ...

Kontrollere animasjoner med spillerinngang

For å animere spillerens sprite kan du bytte mellom ulike rammer basert på spillerens input. For eksempel, når spilleren beveger seg til venstre eller høyre ved hjelp av piltastene, kan du iterere mellom rammene for å skape en illusjon av bevegelse.

# Spillløkke
samtidig som løping:
# ...

# Håndter spillerinndata
keys = pygame.key.get_pressed()
hvis keys[pygame. K_LEFT]:
player_x -= player_speed
gjeldende_ramme = ramme1
elif keys[pygame. K_RIGHT]:
player_x += player_speed
gjeldende_ramme = ramme2
ellers:
gjeldende_ramme = ramme0

# Gjengi spillet
# ...
screen.blit (current_frame, (player_x, player_y))

pygame.display.flip()

# ...

Nedenfor er utgangen:

Inkludert tilleggsfunksjoner

I tillegg til den grunnleggende animasjonsfunksjonaliteten, tilbyr Pygame flere tilleggsfunksjoner for å forbedre spillutviklingsopplevelsen din.

Sprite ark

I stedet for å laste inn individuelle rammer, kan du bruke sprite-ark som inneholder flere rammer i ett enkelt bilde. Pygame tilbyr funksjoner for å trekke ut og vise bestemte områder av et sprite-ark. Her er et eksempel:

# Last inn sprite-arkbildet
sprite_sheet = pygame.image.load("spritesheet.png")

# Definer dimensjonene til hver ramme
frame_width = 32
frame_height = 32

# Funksjon for å trekke ut rammer fra spritearket
defextract_frames(ark, frame_width, frame_height):
# kode for å trekke ut rammer

# Trekk ut rammer fra spritearket
rammer = extract_frames (sprite_sheet, frame_width, frame_height)

# Vis en ramme fra spritearket
gjeldende_ramme = rammer[0]

# Spillløkke
samtidig som løping:
# ...
screen.blit (current_frame, (player_x, player_y))
# ...

Animasjonshastighet

Du kan kontrollere hastigheten på animasjonene dine ved å innføre tidsforsinkelser mellom bildeoppdateringer. Dette gir jevn og realistisk bevegelse. Her er et eksempel på hvordan du kan kontrollere animasjonshastigheten bruker tid modul:

# Animasjonshastighetsvariabler
animasjonsforsinkelse = 100# Forsinkelse i millisekunder mellom rammeoppdateringer
last_frame_time = pygame.time.get_ticcks()

# Spillløkke
samtidig som løping:
# ...

# Sjekk om det har gått nok tid til å oppdatere rammen
current_time = pygame.time.get_ticcks()
hvis current_time - last_frame_time >= animasjonsforsinkelse:
# Oppdater rammen

# Gjengi spillet
# ...
screen.blit (current_frame, (player_x, player_y))

pygame.display.flip()

Kollisjonsdeteksjon

Pygame tilbyr kollisjonsdeteksjonsfunksjoner for å oppdage interaksjoner mellom animerte objekter, som f.eks oppdager når spilleren kolliderer med en plattform. Her er et eksempel på hvordan du kan integrere kollisjonsdeteksjon i spillet ditt:

# Kollisjonsdeteksjon
defsjekk_kollisjon(player_rect, platform_rect):
hvis player_rect.colliderect (platform_rect):
# Kollisjon skjedde
komme tilbakeekte
ellers:
komme tilbakeFalsk

# Spillløkke
samtidig som løping:
# ...

# Utfør kollisjonsdeteksjon
player_rect = pygame. Rect (spiller_x, spiller_y, 20, 20)
platform_rect = pygame. Rect (plattform_x, plattform_y,
platform_width, platform_height)

hvis check_collision (player_rect, platform_rect):
# Håndter kollisjon

# Gjengi spillet
# ...
screen.blit (current_frame, (player_x, player_y))

pygame.display.flip()

Ved å bruke disse tilleggsfunksjonene kan du utvide spillutviklingsmulighetene dine og skape mer dynamiske og oppslukende spillopplevelser. Eksperimenter med forskjellige teknikker, kombiner dem kreativt, og la fantasien veilede deg i å lage virkelig engasjerende spill.

Beste praksis for å lage animasjon i Pygame

Når du legger til animasjon i Pygame-prosjektene dine, er det viktig å følge noen beste fremgangsmåter for å optimalisere implementeringen og sikre jevne og effektive animasjoner. Vurder følgende retningslinjer:

Forhåndslast og lagre rammer i minnet

Lasting av bilder fra disken under spillsløyfen kan forårsake forsinkelser og påvirke ytelsen. For å unngå dette, forhåndslast rammene dine og lagre dem i minnet før spillløkken starter. På denne måten kan du raskt få tilgang til og vise rammene under kjøring uten disk I/O-overhead.

Bruk Pygames innebygde Sprite- og animasjonsklasser

Pygame gir innebygde klasser som pygame.sprite. Sprite og pygame.sprite. Gruppe som forenkler håndteringen av sprites og animasjoner. Ved å bruke disse klassene kan du håndtere kollisjonsdeteksjon, gruppeoppdateringer og gjengivelse mer effektivt.

Optimaliser bildeformater

Vurder å optimalisere bildeformatene dine for bedre ytelse. Pygame støtter ulike bildeformater, inkludert PNG og JPEG. PNG anbefales generelt for bilder med gjennomsiktighet, mens JPEG er egnet for statiske bilder uten gjennomsiktighet.

Eksperimenter med forskjellige bildeformater og komprimeringsnivåer for å finne den optimale balansen mellom bildekvalitet og filstørrelse.

Bruk riktige bildefrekvenser

For å oppnå jevne animasjoner er det viktig å angi en passende bildefrekvens. Pygame gir pygame.time. Klokke klasse, som hjelper til med å kontrollere bildefrekvensen ved å regulere hastigheten til spillløkken.

Ved å ringe til sett kryss() metoden til Clock-objektet på slutten av hver iterasjon, kan du opprettholde en konsistent bildefrekvens. Juster bildefrekvensen basert på kompleksiteten til animasjonene dine og ytelsesmulighetene til målplattformen din.

Ved å følge disse beste fremgangsmåtene kan du optimalisere animasjonsimplementeringen, forbedre ytelsen til spillene dine og skape visuelt tiltalende og engasjerende opplevelser for spillerne dine.

Gjør spill morsommere med animasjoner

Å legge til animasjon i spillene dine kan forbedre den generelle spilleropplevelsen betraktelig. Animasjoner gir liv til karakterer og objekter, og gjør bevegelsene jevnere og mer engasjerende. Enten det er en karakter som hopper, fiender som angriper eller gjenstander som samhandler, gjør animasjoner spillverdenen din mer oppslukende og visuelt tiltalende.

Ved å utnytte Pygames animasjonsevner kan du fengsle spillerne dine og lage spill som etterlater et varig inntrykk.