PlayDrop logoPlayDrop Studio
CriarTroca de partidasGanharAprenderConectoresRecursosComunidadeAjuda
PlayDrop logoPlayDrop Studio
CriarTroca de partidasGanharAprenderConectoresRecursosComunidadeAjuda
Entrar
Carregamento, pausa e áudio
Documentação

Comece aqui

Visão geralSeu primeiro jogoJogos do PlayDropPerguntas frequentes

Crie com o Cloud

Criação com CloudPlanos e gerações

Conecte seu app de IA

Todos os conectoresClaudeChatGPTClaude CodeCodexCursorGeminiAntigravityGrok BuildGrok BotGrok ChatLovableReplit

Publique e compartilhe

Publicar pelo seu app de IAJogos em HTML simplesEmpacotamento e .playPublicação e importaçãoArquivos do jogoVisibilidade e alcanceArte e vídeo da listagemGêneros e tagsLocalizaçãoJogos instantâneos

Experiência de jogo

Carregamento, pausa e áudioTela cheia e áreas segurasSalvamentos na nuvemGrupos locais e controles

Jogue junto

Compartilhamento, amigos e convitesPlacaresConquistasGrupos online e vozServidores em tempo real

Ganhe

MonetizaçãoCréditos e recompensas

Assets

Assets de jogoGeração de assets com IAFormatos personalizados e criações dos jogadores

Referência

SDK de clienteSDK de servidorcatalogue.jsonErros e recuperaçãoSolução de problemas
DocumentaçãoCarregamento, pausa e áudio
Experiência de jogo

Ciclo de vida do jogo no PlayDrop: carregamento, pronto, pausa e áudio

Inicialize o SDK, sinalize que está pronto no primeiro quadro jogável, pause e retome bem, siga o áudio do host e pré-carregue arquivos para apps e offline.

O PlayDrop mostra sua própria tela de carregamento, menu de pausa, controle de som e outras janelas ao redor do seu jogo. A API de ciclo de vida mantém o jogo em sincronia com eles: o jogo para enquanto o PlayDrop o pausa e só toca som quando a política de áudio do PlayDrop permite.

Inicialize e depois sinalize que está pronto

Carregue o SDK, leia o estado inicial, inscreva-se nas mudanças, prepare a primeira tela e só então chame ready(). O PlayDrop mantém a tela de carregamento até lá.

html
<script src="https://assets.playdrop.ai/sdk/playdrop.js"></script>
<script type="module">
  const sdk = await playdrop.init();
  let paused = sdk.host.isPaused;
  setAudio(sdk.host.audioAllowed);
  sdk.host.onAudioAllowedChange(setAudio);
  sdk.host.onPause(() => { paused = true; });
  sdk.host.onResume(() => { paused = false; last = performance.now(); });

  try {
    await loadFirstLevel();
  } catch (error) {
    sdk.host.error("Could not load the first level");
    throw error;
  }
  drawFirstFrame();
  sdk.host.ready();
</script>

Chame ready() quando a primeira tela planejada estiver visível e a entrada funcionar, e não antes de os assets terminarem de carregar. sdk.host.error(message) avisa o PlayDrop de que o jogo não consegue iniciar. setLoadingState e firstFrameReady são nomes antigos para a mesma etapa; use ready().

Fases: prévia, jogo e editor

sdk.host.phase é preview, play ou editor, e onPhaseChange informa as mudanças. As prévias e as capturas mostram o jogo sem uma sessão real: nunca grave salvamentos, pontuações, conquistas ou compras fora de play. sdk.host.mode é play normalmente e dev no frame Dev local.

Pausa e retomada

onPause(reason) e onResume(reason) são disparados quando o jogador abre o menu de pausa, oculta a aba, entra na conta, compra algo ou quando um anúncio ou uma janela do PlayDrop cobre o jogo. reason é um destes valores: tab_hidden, auth_prompt, purchase_flow, host_overlay, detail_hidden, route_change ou native_background; sdk.host.isPaused é o estado atual.

Durante a pausa, pare a simulação e os timers. Ao retomar, reinicie o relógio de quadros para que o jogo não dê um salto para a frente:

js
let last = performance.now();
function frame(now) {
  const dt = paused ? 0 : Math.min((now - last) / 1000, 0.05);
  last = now;
  if (!paused) update(dt);
  render();
  requestAnimationFrame(frame);
}
requestAnimationFrame(frame);

A tecla Esc e o botão Menu de um controle pertencem ao menu de pausa do PlayDrop; não associe ações a eles no seu jogo. Em um jogo em rede, mantenha a conexão com a sala ativa durante a pausa: pausar um jogador não pode parar os outros.

Áudio

Leia sdk.host.audioAllowed uma vez depois de init() e depois acompanhe onAudioAllowedChange. Esse valor combina o silenciamento do jogador, a fase e a pausa, e continua verdadeiro durante uma pausa por aba oculta, para que a música mantenha sua posição. onAudioPolicyChange informa { enabled, reason, volume } quando você também precisa do motivo ou do volume do host.

js
const audio = new AudioContext();
function setAudio(allowed) {
  (allowed ? audio.resume() : audio.suspend()).catch(() => {});
}

O áudio começa silenciado até o host permitir, e os navegadores ainda exigem um gesto do jogador antes de tocar som. Mantenha qualquer configuração de volume do jogo como um limite adicional; o silenciamento do host sempre prevalece. Trate as promises rejeitadas de play() e resume().

Pré-carregamento e jogo offline nos apps

Os apps nativos podem baixar os arquivos de um jogo antes de ele começar e guardá-los para jogar offline. Declare-os no catalogue.json:

json
{
  "prefetch": { "required": ["game.js", "assets/level-1.png"], "optional": ["assets/music.mp3"] },
  "offlineSupported": true
}

A página de entrada sempre é incluída. Os arquivos required são baixados antes de jogar; os optional, depois. offlineSupported: true permite que os apps ofereçam o jogo offline depois que os arquivos obrigatórios estiverem armazenados. Valores inválidos são ignorados e nunca bloqueiam um envio. O site carrega os jogos normalmente. Nos jogos Instantâneos, os arquivos obrigatórios são os arquivos iniciais.

Em hosts que anunciam suporte a dados no dispositivo, salvamentos, pontuações e conquistas feitos offline ficam no dispositivo e são sincronizados quando há conexão; os placares offline mostram só o recorde do próprio jogador. No navegador não há fila offline, então trate a falha de um salvamento. Tudo o que o jogo carrega da internet continua precisando de conexão.

Resposta tátil

Nos apps nativos, sdk.haptics.selection(), impact("light" | "medium" | "heavy") e notification("success" | "warning" | "error") dão uma resposta tátil curta; sdk.haptics.supported diz se o host tem esse recurso. Essas chamadas não fazem nada na web e não dependem do silenciamento.

Guias relacionados

  • Tela cheia e áreas segurasFaça o jogo ocupar a tela toda, com o HUD dentro das áreas seguras do CSS e longe dos controles do host, usando os reservedCorners medidos pelo SDK.
  • Salvamentos na nuvemSalve e carregue o progresso com sdk.me.appData e sdk.me.updateAppData, para convidados e jogadores logados, com as regras de gravação, prévias e modo offline.
  • Jogos instantâneosO que faz um jogo ser instantâneo: vertical, aberto a convidados, até 10 MiB de arquivos iniciais, início em 2 segundos, e a diferença para um jogo comum.
  • SDK de clienteReferência do SDK de navegador: init, host, jogador e salvamentos, controles, social, multijogador, loja, anúncios, placares, conquistas, assets e IA.
AnteriorJogos instantâneos e jogos comuns no PlayDropPróximoTela cheia, áreas seguras e cantos do HUD em jogos do PlayDrop
Ver Markdown
EnglishFrançaisDeutsch日本語한국어EspañolPortuguês (Brasil)Bahasa Indonesia繁體中文简体中文ItalianoPolskiNederlandsSvenskaNorsk bokmålSuomiTürkçeไทยTiếng Việtالعربية

Nesta página

Inicialize e depois sinalize que está prontoFases: prévia, jogo e editorPausa e retomadaÁudioPré-carregamento e jogo offline nos appsResposta tátil
Ver Markdown