-
Notifications
You must be signed in to change notification settings - Fork 0
System
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.
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á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 |
| 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. |
SystemSystem.__del__System.set_windowSystem.updateSystem.renderSystem.blitSystem.draw_fontSystem.draw_geomSystem.push_sceneSystem.pop_sceneSystem.swap_sceneSystem.get_eventsSystem.get_mouse_posSystem.get_mouse_moveSystem.get_animationSystem.load_assetsSystem.unload_assets
System() -> System
Construtor da classe System. Inicia o pygame, cria a janela e a tela e instancia os gerenciadores de recursos.
System.__del__() -> None
Destrutor da classe System. Simplesmente chama o método pygame.quit
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() -> 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() -> 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() -> 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(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(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(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(scene) -> None
Adiciona a cena scene no topo da pilha
System.pop_scene() -> Scene
Remove e retorna a cena no topo da pilha
System.swap_scene(scene) -> None
Substitui a cena atualmente no topo da pilha pela cena scene fornecida. Retorna a cena removida.
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() -> Point
Retorna a posição do mouse relativa a tela do jogo.
System.get_mouse_move() -> Point
Retorna a movimentação relativa do mouse no último frame, relativa a tela do jogo.
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(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(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.
