documentação python para jogos
TRANSCRIPT
-
8/4/2019 Documentao Python para jogos
1/46
Programacao de Jogos em Python
Programacao de Jogos em Python
Gustavo Sverzut Barbieri
GPSL - UNICAMP
28 de abril de 2005
Gustavo Sverzut Barbieri Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
2/46
Programacao de Jogos em Python
1 Introducao
2 Elementos Essenciais do PyGame
3 Sprite e Grupos
4 Referencias e Materiais de Apoio
Gustavo Sverzut Barbieri Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
3/46
Programacao de Jogos em Python
Introducao
Por que Python?
Python e facil!
Linguagem de alto nvel bem parecida com o modo que pensamos,
ideal para fazer a inteligencia de um jogofor e l e m e n t o in e l e m e n t o s :
if e l e m e n t o . tipo in t i p o s _ i n i m i g o s :
a t i r e _ n o _ e l e m e n t o ( e l e m e n t o )
Gustavo Sverzut Barbieri Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
4/46
Programacao de Jogos em Python
Introducao
Por que Python?
Outras vantagens do Python
Multi-plataforma
Orientada a Objetos: encapsulamento
Dinamica
Vasta biblioteca padrao e bibliotecas de terceiros
Grande comunidade de desenvolvedores
Facil de interagir com outras linguagens, em especial C
Geral o bastante para ajudar em areas diversas, como:
Automatizacao de processos de desenvolvimentoAjudar que roteiristas e artistas experimentem com diversosefeitos, sem que necessitem de um vasto conhecimento deprogramacao
Gustavo Sverzut Barbieri Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
5/46
Programacao de Jogos em Python
Introducao
Por que Python?
Problemas e Solucoes
Nem tudo sao maravilhas, o principal problema e:
Python e lento: Python nao e ideal para fazer processamento deimagens, iteracoes sobre grandes matrizes etc.Solucao: Quando a velocidade comecar a ser umproblema, analise o seu codigo em um profiler eotimze tal regiao, talvez implemente-a emC/Assembly.
Na verdade grande parte disso ja esta feito, o PyGame utiliza abiblioteca SDL, que e feita em C. Existem tambem implementacoesde engines bem otimzados que sao utilizaveis no Python.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
P d J P h
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
6/46
Programacao de Jogos em Python
Introducao
Por que PyGame?
PyGame
Como o Python, e multiplataforma
Facil de utilizar
Possui bastante recursos
Rapida o suficiente
import pygame
pygame . init ()
screen = pygame . d i s p l a y . s e t _ m o d e ( ( 8 00 , 60 0 ) )
image = pygame . image . load ( " m i n h a _ i m a g e m . p n g " )
while True :
for event in pygame . event . get ():
if event . type == pygame . QUIT : break
screen . fill ( ( 0 , 0 , 0 ) )
screen . blit ( image , image . g e t _ r e c t () )
pygame . d i s p l a y . flip ()
Gustavo Sverzut Barbieri Programacao de Jogos em Python
P d J P th
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
7/46
Programacao de Jogos em Python
Elementos Essenciais do PyGame
Surface
Surface o que e?
Surface sao superfcies nas quais se desenha. Podem ser 2D ou3D, residir em memoria do sistema ou da placa de vdeo e tambemter varias profundidades de cores.
t a m a n h o = ( 6 4 0 , 4 8 0 )
cor = ( 255 , 0 , 0 ) # v e r m e l h os u p e r f i c i e = S u r f a c e ( tamanho )
s u p e r f i c i e . set_at ( ( 10 , 20 ) , cor )
s u p e r f i c i e . fill ( cor , ( 11 , 21 , 50 , 50 ) )
tela = pygame . d i s p l a y . s e t _ m o d e ( tamanho )
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em P thon
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
8/46
Programacao de Jogos em Python
Elementos Essenciais do PyGame
Surface
Surface operacoes essenciais
fill( cor, area ) Preenche uma area com a cor
get at( posicao ) Pega a cor que esta na posicaoset at( posicao, cor ) Muda a cor da superfcie na posicao
blit( origem, posicao, area origem ) Copia a parte limitada porarea_origem da superfcie origem para a posicao
desejada na superfcie atual.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
9/46
Programacao de Jogos em Python
Elementos Essenciais do PyGame
Surface
Surface profundidade de cor
Em computacao representamos uma superfcie de desenho comouma matriz de pontos de cor. Dependendo do numero de corespossveis temos uma profundidade de cor e representamos demaneiras diferentes, algumas delas:
256 cores Este modo representa 256 cores possveis e eindexado, isto e, temos uma palheta de cores comndices de 0 a 255, cada um com uma cor.
24bpp RGB Tambem conhecido com 16 milhoes de cores. Este
modo representa cada cor com 3 bytes (da o nome24 bits per pixel) e no formato RGB utiliza-se oprimeiro byte para 256 tons de vermelho, o segundopara verde e o terceiro para o azul.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
10/46
Programacao de Jogos em Python
-
8/4/2019 Documentao Python para jogos
11/46
Programacao de Jogos em Python
Elementos Essenciais do PyGame
Surface
Surface convertendo profundidade de cor
Toda vez que se faz um blit() convertemos a profundidade de corda superfcie de origem para ficar equivalente a superfcie dedestino, isto e uma operacao muito custosa e nem sempreprecisamos faze-la, pois podemos deixar as superfcies ja
convertidas.Eliminando este passo podemos deixar o programa ate 6 vezesmais rapido!
sup = sup . c o n v e r t () # c o n v e r t e p a r a a t e l a
img = pygame . image . load ( " i m g . p n g " ). convert ( sup )
Quando nao usar: quando se quer utilizar per-pixel alpha naoconverta para a profundidade de cor da tela, pois ele perdera talrecurso, neste caso utilize convert_alpha().
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
12/46
Programacao de Jogos em Python
Elementos Essenciais do PyGame
Rect
Rect o que e?
Rect representa retangulos, com posicao e dimensoes. Pareceirelevante, mas e uma das classes mais uteis de todo PyGame poisela fornece operacoes que sao muito utilizadas, facilitando odesenvolvimento do jogo
r = Rect ( ( 10 , 10 , 50 , 100 ) )
print r . top , r . bottom # 1 0 1 1 0 print r . left , r . right # 1 0 6 0 print r .midtop , r .midleft # ( 3 5 , 1 0 ) ( 1 0 , 6 0 )print r . center # ( 3 5 , 6 0 )
c1 = r . c o l l i d e p o i n t ( 30 , 40 )c2 = r . c o l l i d e r e c t ( ( 0 , 0 , 100 , 200 ) )
r2 = r . i n f l a t e ( 10 , 10 )
r2 .move_ip ( 5 , 5 )
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
13/46
g g y
Elementos Essenciais do PyGame
Rect
Rect operacoes essenciais
clamp( area ) retorna um novo retangulo que foi movido para ficardentro de area. Util para limitar movimento dentrode um espaco.
clip( area ) retorna um novo retangulo com a area cortada para
caber no retangulo atual.collidepoint( x, y ) verifica se o ponto esta dentro do retangulo
atual.
colliderect( area ) verifica se a area intercepta o retangulo atual.
contains( area ) verifica se a area esta dentro do retangulo atual.inflate( x, y ) retorna um novo retangulo com as dimensoes do
retangulo atual aumentadas pelos valores passados.
move( x, y ) retorna um novo retangulo com as posicoes doretangulo atual movida pelos valores passados.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
14/46
Programacao de Jogos em Python
-
8/4/2019 Documentao Python para jogos
15/46
Elementos Essenciais do PyGame
Display
display operacoes essenciais
flip() atualiza o conteudo da tela toda.
get surface() retorna a superfcie que representa a tela.
list modes() lista possveis dimensoes.set caption( titulo ) muda o ttulo da janela.
set mode( tamanho ) configura a tela para o dado tamanho eretorna a superfcie.
toggle fullscreen() coloca a janela em tela cheia.
update( lista retangulos ) atualiza as areas da tela determinadaspor lista_retangulos.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
16/46
Elementos Essenciais do PyGame
Display
display cuidados especiais
Toda vez que a janela de um aplicativo PyGame forsobreposta por outra janela, a area ficara negra (suja) ate quea tela seja atualizada. E comum ao fazer testes no promptcobrir a janela e depois nao se ve o resultado da operacao,
neste caso descubra a janela e faca pygame.display.flip().Atualize somente as areas necessarias! Se quiser aumentaro desempenho do seu jogo, atualize a tela somente nas areasque voce modificou. Por exemplo, se voce tem umcomponente em movimento, apague a imagem da posicaoantiga (provavelmente desenhando o pedaco da imagem defundo no local), desenha a imagem na posicao nova e atualizesomente estas duas areas. Esta tecnica e chamada de DirtyRectangles.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
17/46
Elementos Essenciais do PyGame
Draw
draw o que e?
O PyGame tem varios recursos para desenhar nas superfcies.
from pygame . draw import line , circle , polygon
tela = pygame . d i s p l a y . g e t _ s u r f a c e ()
line ( tela , ( 255 , 0 , 0 ) , ( 0 , 0 ) , ( 10 , 1 0 ) )circle ( tela , ( 0 , 2 55 , 0 ) , ( 20 , 2 0 ) , 2 0 , 2 )
rect ( tela , ( 0 , 0 , 255 ) , ( 10 , 1 0 , 50 , 50 ) )
p o l y g o n ( tela , ( 2 5 5 , 2 5 5 , 0 ) ,
[ ( 2 0 0 , 2 0 0 ) , ( 2 1 0 , 1 9 0 ) ,
( 2 2 0 , 2 0 0 ) , ( 2 1 0 , 2 1 0 ) ,
( 2 2 0 , 2 2 0 ) , ( 2 0 0 , 2 2 0 ) ] )
pygame . d i s p l a y . flip ()
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
18/46
Elementos Essenciais do PyGame
Draw
draw operacoes essenciais
line( superficie, cor, inicio, fim, espessura ) desenha uma linha.
circle( superficie, cor, posicao, raio, espessura ) desenha umcrculo.
rect( superficie, cor, retangulo, espessura ) desenha um retangulo.
polygon( superficie, cor, lista pontos, espessura ) desenha umpolgono.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
19/46
Elementos Essenciais do PyGame
Image
image o que e?
O PyGame tem recursos para ler e salvar imagens. Por padrao oformato Bitmap(BMP) e suportado, porem se a bibliotecaSDL Image estiver instalada varios outros formatos serao
suportados, dentre eles PNG, GIF, JPEG.
if pygame . image . g e t _ e x t e n d e d ():
nave = pygame . image . load ( " n a v e . p n g " )
else :
nave = pygame . image . load ( " n a v e . b m p " )
pygame . image . save ( tela , " s c r e e n s h o t . b m p " )
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
20/46
Elementos Essenciais do PyGame
Image
image operacoes essenciais
load( arquivo ) le a imagem do arquivo.
save( superficie, arquivo ) salva a superfcie em um arquivo.
get extended() retorna verdadeiro se a biblioteca SDL Imageestiver instalada.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
El E i i d P G
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
21/46
Elementos Essenciais do PyGame
Event
event o que e?
Modulo que cuida dos eventos dentro do PyGame. Voce podeutilizar duas tecnicas para trabalhar com eventos:
Usar a fila de eventos. Todo evento causado (movimento domouse, tecla pressionada, ...) geram eventos que vao para a
fila de eventos a qual voce pode consultar e tomar as acoesnecessarias. A vantagem e que nunca se perde um evento, adesvantagem e que pode adicionar latencia na resposta etambem precisa-se manter estados para combinar acoes (ie:duas teclas simultaneamente).
Consultar diretamente os dispositivos. A vantagem e quepode verificar varios estados ao mesmo tempo, porem tem adesvantagem de perder eventos (ie: o usuario solta o botao domouse justamente quando voce verifica o estado).
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
El t E i i d P G
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
22/46
Elementos Essenciais do PyGame
Event
event usando fila de eventos
from pygame . locals import *
for event in pygame . event . get ():if event . type == QUIT :
sys . exit ()
elif event . type == KEYDOWN :
print event . key
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Elementos Essenciais do PyGame
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
23/46
Elementos Essenciais do PyGame
Event
event consultando os dispositivos
Nesta tecnica voce deve utilizar o modulo que trata de cadadispositivo e periodicamente chamar a funcao pump() do sistema
de eventos para que seu programa nao trave.from pygame . locals import *
w hi le n ot ( pygame .mouse . g e t _ p r e s s e d ( ) [ 0 ] or \
pygame . key . g e t _ p r e s s e d ()[ K_SPACE ] ):
pygame . event . pump ()
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Elementos Essenciais do PyGame
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
24/46
Elementos Essenciais do PyGame
Event
event operacoes essenciais
poll() retorna o proximo evento na fila. Caso nao exista umevento, sera criado um do tipo NOEVENT.
post( evento ) coloca um evento na fila.
pump() caso nao utilize a a fila de eventos voce deve chamarfrequentemente esta funcao para fazer a manutencaodo programa, caso contrario ele pode travar.
get( tipos evento ) retorna todos os eventos de um certo tipo nafila.
clear() limpa a fila de eventos.
wait() retorna o proximo evento na fila ou espera ate queum novo evento entre, caso ela estiver vazia.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Elementos Essenciais do PyGame
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
25/46
Elementos Essenciais do PyGame
Font
font o que e?
Modulo para trabalhar com fontes True Type. Ele so estahabilitado caso voce tenha a biblioteca SDL ttf instalada.
tela = pygame . d i s p l a y . s e t _ m o d e ( ( 6 40 , 48 0 ) )
if pygame . font :font = pygame . font . Font ( " f o n t e . t t f " , 12 )
font . s e t _ u n d e r l i n e ( True )
img = font . render ( " O la Mundo " , True ,
( 2 5 5 , 2 5 5 , 0 ) )
tela . blit ( img , ( 0 , 0 ) )pygame . d i s p l a y . flip ()
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Elementos Essenciais do PyGame
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
26/46
Elementos Essenciais do PyGame
Font
font operacoes essenciais
Estas sao as operacoes do sub-modulo:
get fonts() retorna a lista de fontes disponveis no sistema.
match font( nome ) retorna o caminho para uma fonte que tenha
o nome requerido.get default font() retorna o nome do arquivo da fonte padrao do
sistema.
Font( arquivo, tamanho ) cria uma nova instancia de fonte a
partir de um arquivo.SysFont( nome, tamanho ) cria uma nova instancia de fonte a
partir de uma fonte instalada no sistema.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Elementos Essenciais do PyGame
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
27/46
y
Font
font.Font operacoes essenciais
Estas sao as operacoes da classe Font:
render( texto, antialias, cor frente, cor fundo ) retorna umasuperfcie com o texto desenhado.
size( texto ) calcula qual sera o tamanho da superfcie necessariapara desenha o texto.
set italic( opcao ) habilita ou desabilita o texto em italico.
set bold( opcao ) habilita ou desabilita o texto em negrito.
set underline( opcao ) habilita ou desabilita sublinhar o texto.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Elementos Essenciais do PyGame
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
28/46
y
Transform
transform o que e?
Transform e um modulo para auxiliar modificar superfcies, ele temoperacoes para rotacionar, espelhar, modificar o tamanho e cortarsuperfcies.
img = pygame . image . load ( " m i n h a _ i m a g e m . p n g " )from pygame . t r a n s f o r m import flip , scale , rotate
p o n t a _ c a b e c a = flip ( img , False , True )
i n c l i n a d a = rotate ( img , 45 )
n o v o _ t a m = img . g e t _ r e c t (). inflate ( 5 , 5 )a u m e n t a d a = scale ( img , n o v o _ t a m . size )
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Elementos Essenciais do PyGame
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
29/46
Transform
transform operacoes essenciais
flip( superficie, x, y ) espelha a imagem horizontal e verticalmente,
dependendo se x e y forem verdadeiros ou falsos.
rotate( superficie, angulo ) rotaciona a imagem
scale( superficie, tamanho ) aumenta ou diminui uma imagem.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Elementos Essenciais do PyGame
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
30/46
Mixer
mixer o que e?
Modulo para trabalhar com sons e canais de reproducao. Porpadrao existem 8 canais para reproducao simultanea.
from pygame . locals import *
musica = pygame .mixer . Sound ( " m u s i c a _ f u n d o . w a v " )
efeito = pygame .mixer . Sound ( " e f e i t o . w a v " )aviso = pygame .mixer . Sound ( " a v i s o . w a v " )
musica . play ( -1 )
while True :
for e in pygame . event . get ( [ KEYDOWN ] ):
if e . key == K_SPACE :
efeito . play ()elif e . key == K _ E S C A P E :
musica . f a d e o u t ( 1 5 0 0 )
aviso . play ()
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Elementos Essenciais do PyGame
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
31/46
Mixer
mixer operacoes essenciais
Sound( arquivo ) cria uma nova instancia de objeto de som.
fadeout( tempo ) demora o tempo requerido para deixar todos os
canais mudos, o volume vai abaixando gradualmente.pause() para temporariamente a reproducao de todos os
canais.
stop() para a reproducao de todos os canais.
unpause() restaura a reproducao dos canais parados.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Elementos Essenciais do PyGame
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
32/46
Mixer
mixer.Sound operacoes essenciais
Estas sao as operacoes essenciais da classe Sound:
fadeout( tempo ) demora o tempo requerido para deixar o canalque reproduz este som mudo, o volume vai abaixando
gradualmente.get length() retorna quantos segundos tem este som.
get volume() retorna o valor da altura do som.
play( repeticoes ) inicia a reproducao do som.
set volume( valor ) configura a altura do som, de 0,0 a 1,0.
stop() para a reproducao do som.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Elementos Essenciais do PyGame
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
33/46
Clock
Clock o que e?
Classe para trabalhar com tempo, atrasar a execucao (econsequentemente limitar os quadros por segundo) e tambemobter tempo entre os quadros.
clock = pygame . time . Clock ()FPS = 60
while True :
clock . tick ( FPS )
print " Q u ad ro s p or s eg un do : " , clock . get_fps ()
A operacao mais usada e tick( atraso ) que serve para manteruma taxa de quadros por segundo.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Sprite e Grupos
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
34/46
sprite O que e?
Sprite e uma imagem bi-dimensional que faz parte de uma cenamaior, isto e, os componentes que aparecem no jogo.O PyGame traz um modulo com varios utilitarios para trabalhar
com Sprites e tornar o desenvolvimento muito mais facil. Asclasses basicas sao:
Sprite deve ser herdada pelos componentes do seu jogo.
Group serve para agrupar Sprites, existem especializacoes
desta classe para ajudar com tarefas rotineiras.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em Python
Sprite e Grupos
S i
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
35/46
Sprite
sprite.Sprite o que e?
Sprite e a classe basica que deve ser especializada pelos
componentes do seu jogo. Ela implementa metodos necessariospelas classes de grupo e mantem a lista de grupos a qual pertence.Um Sprite so e considerado vivo se esta dentro de um grupo.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em PythonSprite e Grupos
S it
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
36/46
Sprite
sprite.Sprite operacoes essenciais
add( lista grupos ) adiciona o Sprite a lista de grupos
alive() retorna verdadeiro se esta vivo, isto e, dentro dealgum grupo
groups() retorna a lista de grupos em que este Sprite esta.
kill() remove o Sprite de todos os grupos
remove( lista grupos ) remove o Sprite da lista de grupos.
update() funcao que nao faz nada, deve ser modificada pelasclasses especializadas para atualizar o sprite(movimentar, modificar a imagem, ...).
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em PythonSprite e Grupos
Group
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
37/46
Group
sprite.Group o que e?
Group e a classe basica que contem sprites, existem variasespecializacoes:
GroupSingle mantem apenas o ultimo sprite adicionado.
RenderUpdates implementa o metodo draw( superficie ) quedesenha todos os sprites do grupo na superfcie eretorna a lista de areas modificadas, entao podemosutilizar a tecnica de Dirty Rectangles apenas fazendo:pygame.display.update( meugrupo.draw( tela ) ).
OrderedUpdates especializacao de RenderUpdates, mas faz asatualizacoes na ordem em que os sprites foramadicionados.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em PythonSprite e Grupos
Group
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
38/46
Group
sprite.Group operacoes essenciais
add( lista sprites ) adiciona a lista de Sprites ao grupo.
clear( superfice, fundo ) limpa a superfcie, para isto copia ospedacos que foram sujos anteriormente do fundo.
empty() remove todos os Sprites do grupo.
has( sprite ) verifica se o Sprite esta no grupo.
remove( lista sprites ) remove a lista de Sprites do grupo.
sprites() retorna os Sprites contidos neste grupo.
update( *args ) chama update( *args ) em todos os Sprites dogrupo.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em PythonSprite e Grupos
Group
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
39/46
Group
Exemplo: Movimentando uma Bola
#! / u s r / b i n / en v p y th o n
from copy import copy
import pygame
from pygame . locals import *
from pygame . sprite import Sprite , R e n d e r U p d a t e s
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em PythonSprite e Grupos
Group
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
40/46
Group
class Bola ( Sprite ):
def _ _ i n i t _ _ ( self , pos , * grupos ):
Sprite . _ _ i n i t _ _ ( self , * grupos )self . rect = Rect ( 0 , 0 , 1 0 0 , 1 0 0 )
self . rect . center = pos
# C r i a imagem r = self . rect
self . image = pygame . Surface ( r . size )
self . image . s e t _ c o l o r k e y ( ( 0 , 0 , 0 ) )
self . image . fill ( ( 0 , 0 , 0 ) )
pygame . draw . circle ( self . image ,
( 2 5 5 , 2 5 5 , 2 5 5 ) ,
( r . width / 2 ,
r . height / 2 ) ,r . width / 2 )
# i n i t ( )def move ( self , x , y ):
self . rect .move_ip ( x , y )
# m o v e ( ) Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em PythonSprite e Grupos
Group
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
41/46
p
# C o n f i g u r a c o e s i n i c i a i spygame . init ()
tela = pygame . d i s p l a y . s e t _ m o d e ( ( 6 40 , 48 0 ) )
grupo = R e n d e r U p d a t e s ()
bola = Bola ( ( 0 , 0 ) , grupo )
clock = pygame . time . Clock ()
fundo = pygame . S u r f a c e ( tela . g e t _ s i z e () )
fundo . fill ( ( 0 , 0 , 255 ) )
tela . blit ( fundo , ( 0 , 0 ) )
pygame . d i s p l a y . flip ()
key = { K_UP : False , K_DOWN : False ,
K_LEFT : False , K_RIGHT : False }
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em PythonSprite e Grupos
Group
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
42/46
p
# L a co p r i n c i p a l while True :
clock . tick ( 2 4 )# T ra t a e v e n t o sfor e in pygame . event . get ( [ KEYUP , KEYDOWN ] ):
valor = ( e . type == KEYDOWN )
if e . key == K _ E S C A P E :
raise SystemExit , " F i m . "
elif e . key in key . keys ():
key [ e . key ] = valor
# Movimenta a b o l a de a co rd o com a s t e c l a sif key [ K_UP ]: bola .move ( 0 , -10 )
if key [ K_DOWN ]: bola .move ( 0 , 10 )
if key [ K_LEFT ]: bola .move ( -10 , 0 )if key [ K _ R I G H T ]: bola .move ( 10 , 0 )
grupo . clear ( tela , fundo )
pygame . d i s p l a y . update ( grupo . draw ( tela ) )
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em PythonSprite e Grupos
Group
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
43/46
Detectando colisoesUm dos recursos mais utilizados no desenvolvimento de jogos edetectar colisoes e o PyGame torna esta tarefa facil com asfuncoes:
spritecollide( sprite, grupo, mate ) detecta a colisao do Sprite comos elementos do grupo. Caso mate for verdadeira
executa o metodo kill() dos sprites que colidiram.Esta funcao retorna uma lista com os elementosafetados.
groupcollide( grupo1, grupo2, mate1, mate2 ) detecta a colisaodos Sprites do grupo1 contra os do grupo2 e executa
o metodo kill() nos elementos baseado nos valoresdos parametros mate1 e mate2. Esta funcao retornaum dicionario no qual as chaves sao elementos dogrupo1 e os valores sao listas de elementos do grupo2com os quais eles colidiram.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em PythonReferencias e Materiais de Apoio
Tutorial e Exemplos
http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
44/46
Tutorial e Exemplos
Em http://www.gustavobarbieri.com.br/jogos/existem alguns codigos de jogos simples porem funcionais que
podem ser utilizados como base de novos projetos.O tutorial passo a passo de como planejar e construir um jogopode ser encontrado em:http://www.gustavobarbieri.com.br/jogos/jogo/doc/.Ele aborda como separar os elementos do jogo e com isso
conseguir uma plataforma facil de manter e extender.
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em PythonReferencias e Materiais de Apoio
Referencias
http://www.gustavobarbieri.com.br/jogos/http://www.gustavobarbieri.com.br/jogos/jogo/doc/http://www.gustavobarbieri.com.br/jogos/jogo/doc/http://www.gustavobarbieri.com.br/jogos/http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
45/46
Referencias
Python: http://www.python.org/
PyGame: http://www.pygame.org/
A Newbie Guide to pygame:
http://www.pygame.org/docs/tut/newbieguide.htmlIntroducao ao Pygame:http://www.pygame.org/docs/tut/intro/intro.html
Dicas de Performance para Python: http://www.python.org/moin/PythonSpeed/PerformanceTips
Introducao ao Modulo Sprite do PyGame:http://www.pygame.org/docs/tut/SpriteIntro.html
Gustavo Sverzut Barbieri Programacao de Jogos em Python
Programacao de Jogos em PythonReferencias e Materiais de Apoio
Contato
http://www.python.org/http://www.pygame.org/http://www.pygame.org/docs/tut/newbieguide.htmlhttp://www.pygame.org/docs/tut/intro/intro.htmlhttp://www.python.org/moin/PythonSpeed/PerformanceTipshttp://www.python.org/moin/PythonSpeed/PerformanceTipshttp://www.pygame.org/docs/tut/SpriteIntro.htmlhttp://www.pygame.org/docs/tut/SpriteIntro.htmlhttp://www.python.org/moin/PythonSpeed/PerformanceTipshttp://www.python.org/moin/PythonSpeed/PerformanceTipshttp://www.pygame.org/docs/tut/intro/intro.htmlhttp://www.pygame.org/docs/tut/newbieguide.htmlhttp://www.pygame.org/http://www.python.org/http://find/http://goback/ -
8/4/2019 Documentao Python para jogos
46/46
Contato
Gustavo Sverzut Barbieri
Email: [email protected]
Website: http://www.gustavobarbieri.com.brICQ: 17249123
MSN: [email protected]: [email protected]
Obtenha esta palestra em:http://palestras.gustavobarbieri.com.br/pygame/
Gustavo Sverzut Barbieri Programacao de Jogos em Python
mailto:[email protected]://www.gustavobarbieri.com.br/http://palestras.gustavobarbieri.com.br/pygame/http://palestras.gustavobarbieri.com.br/pygame/http://www.gustavobarbieri.com.br/mailto:[email protected]://find/http://goback/