Cheat Sheet Pygame
Terakhir diperbarui
Persiapan dan game loop
Setiap program pygame membuka jendela, lalu mengulang satu loop sampai pemain keluar.
| Operasi | Kode |
|---|---|
| Instal pygame-ce | python3 -m pip install pygame-ce |
| Impor dan mulai pygame | import pygame
pygame.init() |
| Buka jendela | screen = pygame.display.set_mode((640, 480)) |
| Atur judul jendela | pygame.display.set_caption("My Game") |
| Buat clock | clock = pygame.time.Clock() |
| Game loop | running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill("black")
pygame.display.flip()
clock.tick(60) |
| Matikan setelah loop | pygame.quit() |
Layar
Layar adalah sebuah Surface; tidak ada yang tampil sampai kamu memanggil flip.
| Operasi | Kode |
|---|---|
| Tampilkan frame yang sudah jadi | pygame.display.flip() |
| Perbarui sebagian area saja | pygame.display.update([rect1, rect2]) |
| Bersihkan layar | screen.fill((30, 30, 46)) |
| Ukuran jendela | screen.get_size(), screen.get_width() |
| Layar sebagai Rect | screen.get_rect() |
| Jendela yang bisa diubah ukurannya | pygame.display.set_mode((640, 480), pygame.RESIZABLE) |
| Layar penuh seukuran desktop | pygame.display.set_mode((0, 0), pygame.FULLSCREEN) |
Warna dan menggambar
Fungsi pygame.draw menerima surface, warna, dan posisi. width=0 mengisi bentuknya.
| Operasi | Kode |
|---|---|
| Warna sebagai RGB | (255, 140, 0) |
| Warna dari nama atau hex | "tomato", "#ff8c00", pygame.Color("gold") |
| Persegi panjang | pygame.draw.rect(screen, "red", (x, y, w, h)) |
| Garis tepi dan sudut membulat | pygame.draw.rect(screen, "red", rect, width=2, border_radius=8) |
| Lingkaran (dari titik pusatnya) | pygame.draw.circle(screen, "blue", (cx, cy), radius) |
| Garis | pygame.draw.line(screen, "white", (x1, y1), (x2, y2), 3) |
| Poligon | pygame.draw.polygon(screen, "green", [(0, 0), (40, 0), (20, 30)]) |
| Elips di dalam kotak | pygame.draw.ellipse(screen, "purple", (x, y, w, h)) |
Rect
Rect menyimpan posisi dan ukuran sebagai bilangan bulat.
| Operasi | Kode |
|---|---|
| Buat Rect | player = pygame.Rect(x, y, width, height) |
| Atur posisi lewat titik mana pun | player.center = (320, 240), player.bottom = 400 |
| Tepi dan sudut | left, right, top, bottom, topleft, midbottom |
| Geser di tempat | player.move_ip(dx, dy) |
| Salinan yang digeser | moved = player.move(dx, dy) |
| Jaga tetap di dalam layar | player.clamp_ip(screen.get_rect()) |
| Perbesar dari titik tengah | bigger = player.inflate(20, 20) |
| Posisi desimal (pygame-ce) | pygame.FRect(10.5, 20.25, 40, 40) |
Gambar, Surface, dan blit
Muat gambar sekali sebelum loop, lalu blit di setiap frame.
| Operasi | Kode |
|---|---|
| Muat gambar dengan transparansi | img = pygame.image.load("player.png").convert_alpha() |
| Muat gambar tanpa transparansi | bg = pygame.image.load("sky.png").convert() |
| Tampilkan gambar | screen.blit(img, (x, y)) |
| Tampilkan di tengah | screen.blit(img, img.get_rect(center=(320, 240))) |
| Surface kosong baru | panel = pygame.Surface((200, 100)) |
| Surface transparan | layer = pygame.Surface((200, 100), pygame.SRCALPHA) |
| Buat seluruh Surface semi transparan | img.set_alpha(128) |
| Potong frame dari sprite sheet | frame = sheet.subsurface((0, 0, 32, 32)) |
| Simpan screenshot | pygame.image.save(screen, "shot.png") |
Transformasi
Setiap fungsi mengembalikan Surface baru; ubah yang asli, bukan hasil terakhir.
| Operasi | Kode |
|---|---|
| Ubah ukuran | pygame.transform.scale(img, (64, 64)) |
| Skala dengan faktor | pygame.transform.scale_by(img, 2) |
| Ubah ukuran dengan halus | pygame.transform.smoothscale(img, (64, 64)) |
| Putar (berlawanan arah jarum jam, dalam derajat) | pygame.transform.rotate(img, 45) |
| Putar di sekitar titik tengah | rotated = pygame.transform.rotate(original, angle)
rect = rotated.get_rect(center=rect.center) |
| Cerminkan secara horizontal | pygame.transform.flip(img, True, False) |
Event dan keyboard
Pakai event untuk satu kali tekan dan get_pressed() untuk tombol yang ditahan.
| Operasi | Kode |
|---|---|
| Baca event frame ini | for event in pygame.event.get(): |
| Jendela ditutup | event.type == pygame.QUIT |
| Tombol ditekan | event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE |
| Tombol dilepas | event.type == pygame.KEYUP |
| Karakter yang diketik | event.unicode |
| Tombol yang sedang ditahan | keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
x -= 5 |
| Arah dari dua tombol | dx = keys[pygame.K_RIGHT] - keys[pygame.K_LEFT] |
| Tombol yang ditekan di frame ini (pygame-ce) | pygame.key.get_just_pressed()[pygame.K_SPACE] |
| Konstanta tombol | K_a...K_z, K_0...K_9, K_UP, K_RETURN, K_ESCAPE, K_LSHIFT |
| Nama tombol | pygame.key.name(event.key) |
| Event kustom | HIT = pygame.event.custom_type()
pygame.event.post(pygame.event.Event(HIT)) |
Mouse
Tombol: 1 kiri, 2 tengah, 3 kanan.
| Operasi | Kode |
|---|---|
| Tombol mouse ditekan | event.type == pygame.MOUSEBUTTONDOWN and event.button == 1 |
| Posisi saat ditekan | event.pos |
| Posisi pointer sekarang | x, y = pygame.mouse.get_pos() |
| Tombol mouse yang sedang ditahan | left, middle, right = pygame.mouse.get_pressed() |
| Mouse bergerak | event.type == pygame.MOUSEMOTION, event.rel |
| Roda mouse diputar | event.type == pygame.MOUSEWHEEL, event.y |
| Klik di dalam tombol | button_rect.collidepoint(event.pos) |
| Sembunyikan pointer | pygame.mouse.set_visible(False) |
Sprite dan grup
Sprite menyimpan image dan rect; grup memperbarui dan menggambar banyak sprite sekaligus.
| Operasi | Kode |
|---|---|
| Class sprite | class Coin(pygame.sprite.Sprite):
def __init__(self, pos):
super().__init__()
self.image = coin_img
self.rect = self.image.get_rect(center=pos) |
| Buat grup | coins = pygame.sprite.Group() |
| Tambahkan ke grup | coins.add(Coin((100, 50))) |
| Perbarui setiap sprite | coins.update() |
| Gambar setiap sprite | coins.draw(screen) |
| Hapus sprite dari semua grup | coin.kill() |
| Grup berisi satu sprite | player = pygame.sprite.GroupSingle(Player()) |
Tabrakan
Rect bertabrakan saat saling tumpang tindih; tepi yang hanya bersentuhan tidak dihitung.
| Operasi | Kode |
|---|---|
| Dua persegi panjang | a.colliderect(b) |
| Titik di dalam | rect.collidepoint(x, y) |
| Yang pertama dari banyak | rect.collidelist(walls) # index or -1 |
| Sprite dengan grup | hits = pygame.sprite.spritecollide(player, coins, True) |
| Ada tabrakan atau tidak | pygame.sprite.spritecollideany(player, enemies) |
| Grup dengan grup | pygame.sprite.groupcollide(bullets, enemies, True, True) |
| Akurat per piksel | pygame.sprite.spritecollide(a, group, False, pygame.sprite.collide_mask) |
| Lingkaran | pygame.Vector2(a).distance_to(b) < r1 + r2 |
Teks dan font
Render teks ke Surface, lalu blit.
| Operasi | Kode |
|---|---|
| Font bawaan | font = pygame.font.Font(None, 36) |
| Font sistem | font = pygame.font.SysFont("arial", 24) |
| File font | font = pygame.font.Font("pixel.ttf", 32) |
| Render teks | text = font.render("Score: 10", True, "white") |
| Tampilkan di tengah | screen.blit(text, text.get_rect(center=(320, 40))) |
| Bungkus teks panjang (pygame-ce) | font.render(story, True, "white", None, 400) |
| Ukuran tanpa render | font.size("Hello") |
| Font yang terpasang | pygame.font.get_fonts() |
Suara dan musik
Muat suara sekali. Musik memutar satu lagu langsung dari file-nya.
| Operasi | Kode |
|---|---|
| Muat suara | jump = pygame.mixer.Sound("jump.ogg") |
| Putar | jump.play() |
| Volume suara | jump.set_volume(0.5) |
| Muat musik | pygame.mixer.music.load("theme.ogg") |
| Ulang musik tanpa henti | pygame.mixer.music.play(-1) |
| Jeda dan lanjutkan | pygame.mixer.music.pause(), pygame.mixer.music.unpause() |
| Hentikan musik | pygame.mixer.music.stop() |
Waktu dan timer
Tick dihitung dalam milidetik.
| Operasi | Kode |
|---|---|
| Batasi frame rate | clock.tick(60) |
| Delta time dalam detik | dt = clock.tick(60) / 1000 |
| Frame rate saat ini | clock.get_fps() |
| Milidetik sejak init | pygame.time.get_ticks() |
| Event timer berulang | SPAWN = pygame.event.custom_type()
pygame.time.set_timer(SPAWN, 1000) |
| Timer sekali jalan | pygame.time.set_timer(SPAWN, 2000, loops=1) |
| Hentikan timer | pygame.time.set_timer(SPAWN, 0) |
Vector2
Bilangan desimal untuk posisi dan kecepatan.
| Operasi | Kode |
|---|---|
| Buat vektor | pos = pygame.Vector2(100, 200) |
| Gerakkan sesuai kecepatan | pos += velocity * dt |
| Panjang | velocity.length() |
| Kecepatan sama saat diagonal | if direction.length() > 0:
direction = direction.normalize() |
| Jarak antar titik | pos.distance_to(target) |
| Putar | velocity.rotate(90) |
| Melangkah ke sebuah titik (pygame-ce) | pos.move_towards_ip(target, 5) |
Kode pygame yang sering kamu butuhkan saat membuat game 2D dengan Python, dikelompokkan per tugas: game loop, layar, warna dan menggambar, Rect, gambar dan blit, mengubah ukuran dan memutar, input keyboard dan mouse, sprite dan grup, tabrakan, teks, suara, timer, dan Vector2. Setiap baris berisi potongan kode pendek yang bisa kamu tempel, di samping penjelasan fungsinya.
Semua di sini ditulis untuk pygame-ce 2.5, edisi komunitas pygame, yang tetap kamu impor dengan import pygame. Baris yang ditandai pygame-ce memakai fitur tambahannya; semua baris lain juga berjalan di pygame asli. Coba potongan kode mana pun di playground pygame, yang menjalankan pygame di browser tanpa perlu instalasi. Baru mulai belajar Python? Mulailah dari cheat sheet Python.
Pertanyaan umum tentang cheat sheet pygame
Apakah cheat sheet pygame ini gratis?
Ya. Gratis dan tanpa perlu daftar. Simpan di bookmark atau cetak ke PDF dari browser, lalu kembali kapan pun kamu butuh pemanggilan yang tepat untuk grup sprite, suara, atau pengecekan tabrakan.
Apakah cheat sheet ini bisa dipakai untuk pygame dan pygame-ce?
import pygame dan berbagi hampir seluruh API. Baris yang ditandai pygame-ce (FRect, scale_by, get_just_pressed, pembungkusan teks, dan move_towards_ip) butuh pygame-ce, sedangkan sisanya berjalan di keduanya.Kenapa jendela pygame-ku tidak merespons?
pygame.event.get() sekali di setiap frame, meskipun kamu mengabaikan event-nya, dan akhiri setiap frame dengan pygame.display.flip() dan clock.tick(60).Untuk input, sebaiknya pakai event atau key.get_pressed()?
KEYDOWN untuk aksi yang terjadi sekali per tekan, seperti melompat atau membuka menu. Pakai pygame.key.get_pressed() untuk aksi yang berlangsung selama tombol ditahan, seperti berjalan.