documentação python para jogos

Upload: fredy-roberto-cesar

Post on 07-Apr-2018

222 views

Category:

Documents


1 download

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/