Scripting API
Behavior, Node, Scene, InputMap and the methods of each node that game scripts can call.
This page is still in Portuguese: the English translation is in progress.
Generated from the Pygame Studio runtime. Not edited by hand.
Um script é um arquivo .py do projeto com uma classe que herda de Behavior. Campos export(...) viram propriedades do nó.
from pgstudio import Behavior, KinematicBody, Vec2, export
class Jogador(Behavior[KinematicBody]):
velocidade: float = export(240.0, min=0)
def on_update(self, dt: float) -> None:
self.node.move_and_slide(Vec2(self.input.axis("esquerda", "direita") * self.velocidade, 0), dt)
Para as propriedades de cada nó veja nos.md.
Behavior
Todo script do jogo é uma classe que herda de Behavior[TipoDoNó] e fica ligada a um nó (self.node).
| Membro | O que faz |
|---|---|
node |
atributo: o nó a que o script está ligado (tipado pelo argumento: Behavior[KinematicBody]) |
scene |
atributo: a cena (raiz); tem input, tween, change_scene, set_volume, find, attributes |
input |
atributo: o mapa de entrada (pressed, held, released, axis) |
on_ready() -> None |
chamado uma vez, quando o jogo começa (ou a cena troca) |
on_update(dt: float) -> None |
todo quadro, com dt em segundos |
on_draw(surface) -> None |
todo quadro, depois do desenho: dá a superfície para desenhar por cima |
on_input(event) -> None |
para cada evento do pygame (teclado, mouse…) |
Node
Todo objeto da cena. Propriedades do tipo (position, color…) são atributos; attributes guarda dados livres.
| Membro | O que faz |
|---|---|
find(path: str) -> Node | None |
acha um nó por caminho de nomes a partir deste: 'Interface/Placar', '..' sobe um nível |
get(name: str) -> Any |
lê uma propriedade pelo nome: node.get('color') |
set(name: str, value: Any) -> None |
grava uma propriedade pelo nome (erro se não existir): node.set('color', '#ff0000') |
by_tag(tag: str) -> list[Node] |
todos os nós, deste para baixo, com essa etiqueta |
add_child(child: Node, index: int | None = None) -> Node |
põe um nó dentro deste (em index, se der) |
remove_child(child: Node) -> None |
tira um filho |
reparent(new_parent: Node, index: int | None = None) -> None |
muda o pai deste nó |
walk() -> Iterator[Node] |
percorre este nó e todos os descendentes, em pré-ordem |
is_visible_in_tree() -> bool |
False se este nó ou algum ancestral estiver oculto |
Scene
A cena é a raiz; os scripts a acessam por self.scene.
| Membro | O que faz |
|---|---|
tween(node: Node, prop: str, to, duration: float, ease: str = linear) |
anima uma propriedade (número ou par) até um valor: scene.tween(nó, 'position', Vec2(100, 0), 0.5, ease='out_cubic') |
change_scene(path: str) -> None |
troca para outra cena do projeto no fim do quadro: scene.change_scene('scenes/fase2.scene.json') |
set_volume(bus: str, value: float) -> None |
volume (0 a 1) de um grupo de áudio: 'master', 'music', 'sfx' ou 'ui' |
InputMap
Acessado por self.input. As ações vêm de [input.actions] no project.toml (editor: Arquivo → Mapa de entrada).
| Membro | O que faz |
|---|---|
pressed(action: str) -> bool |
True só no quadro em que a ação começou (tecla, botão do mouse ou do gamepad) |
held(action: str) -> bool |
True enquanto a ação estiver segurada |
released(action: str) -> bool |
True só no quadro em que a ação foi solta |
axis(negative: str, positive: str) -> float |
-1, 0 ou +1 a partir de duas ações: input.axis('esquerda', 'direita') |
mouse_pos |
atributo: posição do mouse na tela do jogo (x, y) |
KinematicBody
Corpo movido pelo script, que para e desliza nos obstáculos (StaticBody, outros corpos da máscara, blocos sólidos de TileMap).
| Membro | O que faz |
|---|---|
move_and_slide(velocity: pygame.Vector2 | tuple[float, float], dt: float) -> pygame.Vector2 |
anda velocidade × dt deslizando; devolve a velocidade com o eixo barrado zerado e atualiza on_floor/on_wall |
move_and_collide(delta: pygame.Vector2 | tuple[float, float]) -> Collision | None |
anda delta e para ao encostar; devolve a colisão (colisor, normal, resto) ou None |
on_floor |
atributo: encostou embaixo no último move_and_slide (y cresce para baixo) |
on_ceiling |
atributo: encostou em cima |
on_wall |
atributo: encostou do lado |
Area
Sensor: não bloqueia, só avisa quem entra e sai.
| Membro | O que faz |
|---|---|
body_entered |
sinal: area.body_entered.connect(fn); fn(corpo) roda quando um corpo da máscara entra |
body_exited |
sinal: quando sai |
overlapping_bodies() -> list[StaticBody] |
os corpos dentro da área agora |
Button
Botão de UI.
| Membro | O que faz |
|---|---|
clicked |
sinal: button.clicked.connect(fn); roda ao soltar o clique (ou Enter/Espaço/A com o botão focado) |
focused |
atributo: o botão tem o foco de teclado/gamepad |
hovered |
atributo: o mouse está em cima |
AnimatedSprite
Sprite com animações de um arquivo .anim.json.
| Membro | O que faz |
|---|---|
play(name: str | None = None, restart: bool = False) -> None |
toca uma animação (restart=True recomeça mesmo se já tocava) |
stop() -> None |
para no quadro atual |
current_frame() -> int |
o número do quadro da spritesheet que está na tela |
current_animation() -> Animation | None |
a animação ativa (nome, quadros, fps, loop) ou None |
animation_finished |
sinal: nome da animação que acabou (só as sem loop) |
animation_changed |
sinal: nome da nova animação |
Timer
Contador com sinal.
| Membro | O que faz |
|---|---|
start(wait_time: float | None = None) -> None |
começa a contar (wait_time opcional) |
stop() -> None |
para |
timeout |
sinal: quando o tempo acaba |
AudioPlayer
Toca um arquivo de áudio.
| Membro | O que faz |
|---|---|
play() -> bool |
toca do começo; False se não deu (sem arquivo ou sem áudio) |
stop() -> None |
para |
is_playing |
atributo: está tocando |
effective_volume() -> float |
volume final: volume × grupo × master |
Camera2D
Câmera do jogo.
| Membro | O que faz |
|---|---|
shake(amount: float = 8.0, duration: float = 0.3) -> None |
treme a vista: camera.shake(amount_px, duration_s) |