Skip to content
Rafael Trindade edited this page Jan 15, 2017 · 5 revisions

A classe System encarrega-se de gerenciar toda a parte essencial da engine, incluindo:

  • Criar janela e tela e gerenciar suas proporções
  • Gerenciar a pilha de cenas, permitindo operações de acesso (exclusão, inserção e troca) e trocas de contexto em tempo de execução (basicamente trocar de uma cena para outra).
  • Armazenar as instâncias dos gerenciadores de recursos (texturas, fontes e sons).
  • Armazenar uma cópia dos eventos do frame atual.¹
  • Fornecer métodos para desenhar texturas, formas geométricas e textos na tela.
  • Fornecer métodos para obter movimentação e posição do mouse traduzidos para coordenada de tela.

Menu


Sugestões

Você provavelmente irá querer que o jogo possua apenas uma instância de System. Muito provavelmente localizada em um arquivo main.py. Múltiplas instâncias de System podem levar a redundância de dados.

O fato de System angariar os eventos ocorridos no frame tem uma importância crucial: a fila de eventos do pygame é esvaziada no primeiro acesso ao método pygame.event.get. Logo, múltiplos GameObjects e Scenes não conseguiriam todos os eventos ao chamar diversas vezes o método no mesmo frame. Para conseguir uma cópia dos eventos, deve-se acessar o método get_events desta classe.

Variáveis Globais

Variável Tipo Descrição
SCREEN_SIZE Point Tamanho da tela.
WINDOW_SIZE Point Tamanho incial da janela.
GAME_NAME str O nome do jogo, que será colocado no título da janela criada para o jogo.
GAME_DIR str O diretório raiz do jogo. Aconselha-se a não mexer nessa definição, uma vez que ela é bem precisa e garantida pelas bibliotecas os e sys do python.
WHITE_COLOR pygame.Color Simplesmente a cor branca

Atributos de System

Atributo Tipo Descrição
System.screen pygame.Surface pygame.Surface que representa a tela do jogo a ser desenhada. Todos os artefatos do jogo devem trabalhar acreditando que este é a tela real do jogo, e com isso entende-se sistemas de tamanhos e coordenadas relativos ao tamanho dessa tela. Originalmente pensado em ser Full HD (1920x1080).
System.window_size Point Tamanho atual da janela do jogo. O valor inicial é definido pela variável global WINDOW_SIZE. Quando houver um redimensionamento, esse valor será alterado automaticamente para o novo tamanho da janela.
System.window pygame.Surface pygame.Surface referente à Surface da(o) janela/display ativa(o). Representa a janela real da aplicação.
System.scale float Taxa de redimensionamento da tela para caber dentro da janela. Procura manter a proporção da tela, logo escolhe a menor taxa de redimensionamento em largura ou altura.
System.screen_real_size Point Tamanho real da tela em relação à janela. Atingível ao se multiplicar o tamanho da tela pela taxa de redimensionamento
System.offset Point Offset de deslocamento do pixel inicial (0,0) da tela real na janela. Com isso é possível deslocar a tela redimensionada e ter-se tarjas pretas nas sobras de espaço, destacando a manutenção da proporção original da tela.
System.scene_stack list Pilha de cenas do jogo. A cena do topo é sempre a ativa.
System.events list Lista de eventos do frame atual. Seu acesso deve ser obtido indiretamente através do metodo get_events.
System.camera pygame.Rect Retângulo relativo à posição e ao tamanho da câmera no jogo.
System.textures Texture Instância do gerenciador de texturas.
System.texturespecs Texture Instância do gerenciador de especificações de textura.
System.fonts Font Instância do gerenciador de fontes.
System.clock pygame.time.Clock Instância do controlador de tempo do jogo. Garante o FPS menor ou igual a 60.
System.delta_time int tempo em milisegundos gastos no último frame.

Métodos de System

Lista de métodos:


System

System() -> System

Construtor da classe System. Inicia o pygame, cria a janela e a tela e instancia os gerenciadores de recursos.


System.__del__

System.__del__() -> None

Destrutor da classe System. Simplesmente chama o método pygame.quit


System.set_window

System.set_window(new_size) -> None

Define o novo tamanho new_size para a janela. Recalcula as taxas de redimensionamento e de offset.


System.run

System.run() -> None

Loop das cenas. Roda uma cena até que termine, então procura por novas cenas na pilha. Se não houver mais cenas, termina.


System.update

System.update() -> None

Atualiza o sistema. A cena ativa deve chamar esse método antes de qualquer outro método update (comportamento implementado por padrão em Scene.update)


System.render

System.render() -> None

Renderiza a tela na janela. A cena ativa deve chamar esse método depois de todos os outros métodos render do jogo.(comportamento implementado por padrão em Scene.render).


System.blit

System.blit(ID, dest, src=None, fixed=False) -> None

Desenha a textura ID (que deve estar disponível no gerenciador de texturas) na tela na posição especificada por dest. Uma porção da textura original pode ser especificada com o parâmetro src. Se o tamanho de dest é diferente de src, há um redimensionamento.

Possui suporte para renderização independente da posição da câmera (parâmetro fixed), como é o caso de menus.


System.draw_font

System.draw_font(text, font_name, size, destination, color=WHITE_COLOR, centered=True, fixed=False) -> None

Renderiza um texto text com uma fonte de tamanho size obtida do arquivo font_name e desenha na tela na posição destination. Possui suporte para renderização independente da posição da câmera (parâmetro fixed), como é o caso de menus.

centered determina se a fonte será centralizada na posição destination.


System.draw_geom

System.draw_geom(name, **kargs) -> None

Desenha uma forma geométrica na tela. O nome da forma deve ser passado por name. Esse nome deve corresponder aos nomes dos métodos encontrados em pygame.gfxdraw. Os argumentos para desenho devem ser passados no formato chave=valor para o método. Atente que os parâmetros são os mesmos esperados pelos métodos gfxdraw do pygame.


System.push_scene

System.push_scene(scene) -> None

Adiciona a cena scene no topo da pilha


System.pop_scene

System.pop_scene() -> Scene

Remove e retorna a cena no topo da pilha


System.swap_scene

System.swap_scene(scene) -> None

Substitui a cena atualmente no topo da pilha pela cena scene fornecida. Retorna a cena removida.


System.get_events

System.get_events() -> list

Retorna uma cópia da fila de eventos ocorridos no último frame. Seu uso é importante pelos componentes do jogo¹.


System.get_mouse_pos

System.get_mouse_pos() -> Point

Retorna a posição do mouse relativa a tela do jogo.


System.get_mouse_move

System.get_mouse_move() -> Point

Retorna a movimentação relativa do mouse no último frame, relativa a tela do jogo.


System.get_animation

System.get_animation(image, name) -> dict

Retorna um dicionário com os tiles e o tempo de cada tile para a animação de nome name oriunda da textura image.


System.load_assets

System.load_assets(name) -> None

Carrega todos os recursos para uma cena de nome name do jogo. Os recursos para essa cena devem estar dentro de pastas com o mesmo nome da cena, dentro das respectivas pastas de recurso.


System.unload_assets

System.unload_assets(name) -> None

Desarrega todos os recursos para uma cena de nome name do jogo. Os recursos para essa cena devem estar dentro de pastas com o mesmo nome da cena, dentro das respectivas pastas de recurso.