Menu
CoddyTech

Pygame Cheat Sheet: guia rápido

Última atualização

Configuração e loop do jogo

Todo programa pygame abre uma janela e depois repete um loop até o jogador sair.

OperaçãoCódigo
Instalar o pygame-cepython3 -m pip install pygame-ce
Importar e iniciar o pygameimport pygame pygame.init()
Abrir uma janelascreen = pygame.display.set_mode((640, 480))
Definir o título da janelapygame.display.set_caption("My Game")
Criar um relógioclock = pygame.time.Clock()
O loop do jogorunning = 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)
Encerrar depois do looppygame.quit()

Tela

A tela é uma Surface; nada aparece até você chamar flip.

OperaçãoCódigo
Mostrar o quadro prontopygame.display.flip()
Mostrar só algumas áreaspygame.display.update([rect1, rect2])
Limpar a telascreen.fill((30, 30, 46))
Tamanho da janelascreen.get_size(), screen.get_width()
A tela como Rectscreen.get_rect()
Janela redimensionávelpygame.display.set_mode((640, 480), pygame.RESIZABLE)
Tela cheia no tamanho da área de trabalhopygame.display.set_mode((0, 0), pygame.FULLSCREEN)

Cores e desenho

As funções de pygame.draw recebem uma superfície, uma cor e uma posição. width=0 preenche.

OperaçãoCódigo
Cor em RGB(255, 140, 0)
Cor por nome ou hexadecimal"tomato", "#ff8c00", pygame.Color("gold")
Retângulopygame.draw.rect(screen, "red", (x, y, w, h))
Contorno e cantos arredondadospygame.draw.rect(screen, "red", rect, width=2, border_radius=8)
Círculo (pelo centro)pygame.draw.circle(screen, "blue", (cx, cy), radius)
Linhapygame.draw.line(screen, "white", (x1, y1), (x2, y2), 3)
Polígonopygame.draw.polygon(screen, "green", [(0, 0), (40, 0), (20, 30)])
Elipse dentro de uma caixapygame.draw.ellipse(screen, "purple", (x, y, w, h))

Rect

Um Rect guarda uma posição e um tamanho como números inteiros.

OperaçãoCódigo
Criar um Rectplayer = pygame.Rect(x, y, width, height)
Posicionar por qualquer pontoplayer.center = (320, 240), player.bottom = 400
Bordas e cantosleft, right, top, bottom, topleft, midbottom
Mover no lugarplayer.move_ip(dx, dy)
Cópia movidamoved = player.move(dx, dy)
Manter dentro da telaplayer.clamp_ip(screen.get_rect())
Aumentar em volta do centrobigger = player.inflate(20, 20)
Posições com casas decimais (pygame-ce)pygame.FRect(10.5, 20.25, 40, 40)

Imagens, Surfaces e blit

Carregue as imagens uma vez, antes do loop, e faça blit delas a cada quadro.

OperaçãoCódigo
Carregar uma imagem com transparênciaimg = pygame.image.load("player.png").convert_alpha()
Carregar uma imagem opacabg = pygame.image.load("sky.png").convert()
Desenhar uma imagemscreen.blit(img, (x, y))
Desenhar centralizadascreen.blit(img, img.get_rect(center=(320, 240)))
Nova Surface em brancopanel = pygame.Surface((200, 100))
Surface transparentelayer = pygame.Surface((200, 100), pygame.SRCALPHA)
Deixar uma Surface inteira translúcidaimg.set_alpha(128)
Recortar um quadro de uma sprite sheetframe = sheet.subsurface((0, 0, 32, 32))
Salvar uma captura de telapygame.image.save(screen, "shot.png")

Transformações

Cada função retorna uma Surface nova; transforme o original, não o último resultado.

OperaçãoCódigo
Redimensionarpygame.transform.scale(img, (64, 64))
Escalar por um fatorpygame.transform.scale_by(img, 2)
Redimensionar com suavizaçãopygame.transform.smoothscale(img, (64, 64))
Girar (sentido anti-horário, em graus)pygame.transform.rotate(img, 45)
Girar em torno do centrorotated = pygame.transform.rotate(original, angle) rect = rotated.get_rect(center=rect.center)
Espelhar na horizontalpygame.transform.flip(img, True, False)

Eventos e teclado

Use eventos para toques únicos e get_pressed() para teclas seguradas.

OperaçãoCódigo
Ler os eventos deste quadrofor event in pygame.event.get():
Janela fechadaevent.type == pygame.QUIT
Uma tecla foi pressionadaevent.type == pygame.KEYDOWN and event.key == pygame.K_SPACE
Uma tecla foi soltaevent.type == pygame.KEYUP
Caractere digitadoevent.unicode
Teclas seguradas agorakeys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: x -= 5
Direção a partir de duas teclasdx = keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]
Teclas pressionadas neste quadro (pygame-ce)pygame.key.get_just_pressed()[pygame.K_SPACE]
Constantes de teclasK_a...K_z, K_0...K_9, K_UP, K_RETURN, K_ESCAPE, K_LSHIFT
Nome de uma teclapygame.key.name(event.key)
Evento personalizadoHIT = pygame.event.custom_type() pygame.event.post(pygame.event.Event(HIT))

Mouse

Botões: 1 esquerdo, 2 do meio, 3 direito.

OperaçãoCódigo
Um botão foi pressionadoevent.type == pygame.MOUSEBUTTONDOWN and event.button == 1
Onde foi pressionadoevent.pos
Posição atual do ponteirox, y = pygame.mouse.get_pos()
Botões segurados agoraleft, middle, right = pygame.mouse.get_pressed()
O mouse se moveuevent.type == pygame.MOUSEMOTION, event.rel
A roda girouevent.type == pygame.MOUSEWHEEL, event.y
Clique dentro de um botãobutton_rect.collidepoint(event.pos)
Esconder o ponteiropygame.mouse.set_visible(False)

Sprites e grupos

Um sprite guarda uma image e um rect; um grupo atualiza e desenha vários.

OperaçãoCódigo
Classe de spriteclass Coin(pygame.sprite.Sprite): def __init__(self, pos): super().__init__() self.image = coin_img self.rect = self.image.get_rect(center=pos)
Criar um grupocoins = pygame.sprite.Group()
Adicionar a um grupocoins.add(Coin((100, 50)))
Atualizar todos os spritescoins.update()
Desenhar todos os spritescoins.draw(screen)
Tirar um sprite de todos os gruposcoin.kill()
Grupo com um único spriteplayer = pygame.sprite.GroupSingle(Player())

Colisões

Rects colidem quando se sobrepõem; bordas que só se encostam não contam.

OperaçãoCódigo
Dois retângulosa.colliderect(b)
Ponto dentrorect.collidepoint(x, y)
O primeiro de váriosrect.collidelist(walls) # index or -1
Sprite contra um grupohits = pygame.sprite.spritecollide(player, coins, True)
Qualquer colisãopygame.sprite.spritecollideany(player, enemies)
Grupo contra grupopygame.sprite.groupcollide(bullets, enemies, True, True)
Pixel a pixelpygame.sprite.spritecollide(a, group, False, pygame.sprite.collide_mask)
Círculospygame.Vector2(a).distance_to(b) < r1 + r2

Texto e fontes

Renderize o texto em uma Surface e depois faça blit.

OperaçãoCódigo
Fonte padrãofont = pygame.font.Font(None, 36)
Fonte do sistemafont = pygame.font.SysFont("arial", 24)
Arquivo de fontefont = pygame.font.Font("pixel.ttf", 32)
Renderizar textotext = font.render("Score: 10", True, "white")
Desenhar centralizadoscreen.blit(text, text.get_rect(center=(320, 40)))
Quebrar texto longo (pygame-ce)font.render(story, True, "white", None, 400)
Tamanho sem renderizarfont.size("Hello")
Fontes instaladaspygame.font.get_fonts()

Som e música

Carregue os sons uma vez. A música toca uma faixa em streaming direto do arquivo.

OperaçãoCódigo
Carregar um somjump = pygame.mixer.Sound("jump.ogg")
Tocar o somjump.play()
Volume do somjump.set_volume(0.5)
Carregar músicapygame.mixer.music.load("theme.ogg")
Repetir a música sem pararpygame.mixer.music.play(-1)
Pausar e retomarpygame.mixer.music.pause(), pygame.mixer.music.unpause()
Parar a músicapygame.mixer.music.stop()

Tempo e timers

Os ticks são em milissegundos.

OperaçãoCódigo
Limitar a taxa de quadrosclock.tick(60)
Delta time em segundosdt = clock.tick(60) / 1000
Taxa de quadros atualclock.get_fps()
Milissegundos desde o initpygame.time.get_ticks()
Evento de timer repetidoSPAWN = pygame.event.custom_type() pygame.time.set_timer(SPAWN, 1000)
Timer de uma vez sópygame.time.set_timer(SPAWN, 2000, loops=1)
Parar um timerpygame.time.set_timer(SPAWN, 0)

Vector2

Números decimais para posições e velocidades.

OperaçãoCódigo
Criar um vetorpos = pygame.Vector2(100, 200)
Mover por uma velocidadepos += velocity * dt
Comprimentovelocity.length()
Mesma velocidade nas diagonaisif direction.length() > 0: direction = direction.normalize()
Distância entre pontospos.distance_to(target)
Girarvelocity.rotate(90)
Avançar até um ponto (pygame-ce)pos.move_towards_ip(target, 5)

O código de pygame que você usa ao criar um jogo 2D em Python, agrupado por tarefa: o loop do jogo, a tela, cores e desenho, Rect, imagens e blit, escala e rotação, entrada de teclado e mouse, sprites e grupos, colisões, texto, som, timers e Vector2. Cada linha é um trecho curto para colar, ao lado do que ele faz.

Tudo aqui foi escrito para o pygame-ce 2.5, a edição da comunidade do pygame, que continua sendo importada com import pygame. As linhas marcadas com pygame-ce usam os recursos dele; todas as outras também funcionam no pygame original. Teste qualquer trecho no playground de pygame, que roda pygame no seu navegador sem instalar nada. Ainda não sabe Python? Comece pelo cheat sheet de Python.

Perguntas frequentes sobre o cheat sheet de pygame

Este cheat sheet de pygame é grátis?

Sim. É grátis e não precisa de cadastro. Salve nos favoritos, ou imprima em PDF pelo navegador, e volte sempre que precisar da chamada exata para um grupo de sprites, um som ou um teste de colisão.

Este cheat sheet funciona com pygame e pygame-ce?
Sim. Os dois são importados com import pygame e compartilham quase toda a API. As linhas marcadas com pygame-ce (FRect, scale_by, get_just_pressed, a quebra de texto e move_towards_ip) precisam do pygame-ce, e todo o resto roda em qualquer um dos dois.
Por que minha janela do pygame não responde?
O loop do jogo não está lendo os eventos. Chame pygame.event.get() uma vez a cada quadro, mesmo que ignore os eventos, e termine cada quadro com pygame.display.flip() e clock.tick(60).
Devo usar eventos ou key.get_pressed() para a entrada?
Use um evento KEYDOWN para ações que acontecem uma vez por toque, como pular ou abrir um menu. Use pygame.key.get_pressed() para ações que duram enquanto a tecla está segurada, como andar.
Ilustração das linguagens de programação do Coddy

Aprenda Pygame com a Coddy

Começar