FPS ja piirtäminen
Ennen kuin aletaan piirtämään ikkunaan asioita, niin määritetään pelin FPS (frames per second eli piirtämisnopeus). Jos sitä ei määritetä, niin pelin nopeus on niin suuri kuin vain tietokoneessasi riittää tehoja, eli turhan iso. Lisätään koodiin pari riviä:
# ...
fps = 60
clock = pygame.time.Clock()
while running:
clock.tick(fps)
# ...
Ensin siis määritellään muuttuja fps, joka sisältää sen kuinka monta kertaa sekunnissa haluamme
while-silmukan pyörivän. Sitten luodaan pygamen Clock-objekti, jonka avulla fps:ää säädellään.
Sitten laitetaan while-silmukkaan rivi, joka säätelee fps:ää äsken luodun Clock-objektin
avulla. Tick-funktio ottaa argumentiksi halutun fps:än. Se on tallennettuna fps
-muuttujaan,
joten annetaan muuttuja funktiolle argumentiksi.
Ikkunaan piirtäminen
Jotta ikkunaan voi piirtää, tarvitsemme muuttujan, joka kuvaa ikkunaa. Alussa kutsumamme
pygame.display.set_mode
-funktio palauttaa tällaisen ikkunaa kuvaavan objektin. Voimme
tallentaa tämän objektin muuttujaan näin:
window = pygame.display.set_mode((1000, 800))
Älä siis lisää toista funktiokutsua, vaan kirjoita samalle riville window =
, jotta funktion
antama objekti tallentuu window-muuttujaan.
Sitten voimme piirtää ikkunaan. Täytetään ikkuna ensin vaikka valkoisella värillä. Pygamessa
värejä kuvataan tuplella, joka sisältää kolme numeroa, joista ensimmäinen tarkoittaa punaisen
määrää, toinen vihreän määrää ja kolmas sinisen määrää: siis RGB-arvona. Jos etsit netistä
"color picker", voit valita itse jonkun värin. Katso vain mitkä sen R, G ja B -arvot ovat.
Esimerkiksi valkoinen väri on RGB-arvoina (255,255,255)
ja musta on (0,0,0)
.
Määritellään koodin alkuun muuttuja, johon sijoitamme valkoisen (tai muun haluamasi) värin RGB-arvon. Muuttuja määritellään näin:
white = (255,255,255)
Sitten laitetaan while-silmukan sisään komento, joka täyttää ikkunan värillä. Käytetään tähän ikkunaa kuvaavaa window-muuttujaa, jonka määrittelimme hetki sitten.
while running:
# ...
window.fill(white)
pygame.display.update()
Lisäksi lisäsimme komennon, joka päivittää ikkunan. Muuten mikään piirtämämme ei näy ikkunassa. Kun lisäät joitakin muita piirtämiskomentoja, niin jätä update-komento viimeiseksi.
Hahmon piirtäminen
Lisätään peliin hahmo. Ensin meidän täytyy ladata hahmon kuva ohjelmaan. Voit käyttää tätä leppäkerttuhahmoa tai jotain muuta haluamaasi kuvaa. Laita kuva samaan kansioon kuin kooditiedosto ja laita sen nimeksi leppis.png. Laitetaan koodin alkupäähän tämä koodirivi, joka lataa kuvan muuttujaan leppis_image:
leppis_image = pygame.image.load("leppis.png")
Sitten meidän täytyy tehdä kaksi muuttujaa, jotka kuvaavat leppiksen sijaintia ikkunassa. Toinen on x-koordinaatti eli sijainti vaaka-akselilla, ja toinen on y-koordinaatti eli sijainti pystyakselilla. Akselit alkavat nollasta, ja x-koordinaatti nolla on ikkunan vasemmassa reunassa, ja y-koordinaatti nolla on ikkunan yläreunassa. Valitse siis x-koordinaatti nollan ja ikkunan leveyden väliltä, ja vastaavasti y-koordinaatti nollan ja ikkunan korkeuden väliltä.
Määritellään alkuun nämä muuttujat:
leppis_x = 350
leppis_y = 500
Ja sitten laitetaan while-silmukkaan komento, joka piirtää leppiksen:
while running:
# ...
window.fill(white)
window.blit(leppis_image, (leppis_x, leppis_y))
pygame.display.update()
Muista laittaa piirtämiskomennot fill-komennon jälkeen. Muuten piirretyt asiat jäävät valkoisen taustan taakse.
Huom: Blit-piirtämiskomento ottaa ensimmäiseksi argumentiksi piirrettävän kuvan, ja toiseksi argumentiksi tuplen, joka sisältää x- ja y-koordinaatit. Muista siis sulut koordinaattien ympärille.
Nyt kun suoritat koodin, niin leppiksen pitäisi näkyä ikkunassa. Koko koodin pitäisi näyttää tältä:
import pygame
window = pygame.display.set_mode((1000, 800))
pygame.display.set_caption("Leppispeli")
fps = 60
clock = pygame.time.Clock()
white = (255, 255, 255)
leppis_image = pygame.image.load("leppis.png")
leppis_x = 350
leppis_y = 500
running = True
while running:
clock.tick(fps)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
window.fill(white)
window.blit(leppis_image, (leppis_x, leppis_y))
pygame.display.update()