PlayDrop logoPlayDrop Studio
CrearIntercambio de partidasGanarAprenderConectoresRecursosComunidadAyuda
PlayDrop logoPlayDrop Studio
CrearIntercambio de partidasGanarAprenderConectoresRecursosComunidadAyuda
Iniciar sesión
Carga, pausa y audio
Documentación

Empieza aquí

ResumenTu primer juegoJuegos de PlayDropPreguntas frecuentes

Crea con Cloud

Creación con CloudPlanes y generaciones

Conecta tu app de IA

Todos los conectoresClaudeChatGPTClaude CodeCodexCursorGeminiAntigravityGrok BuildGrok BotGrok ChatLovableReplit

Publica y comparte

Publicar desde tu app de IAJuegos HTML simplesEmpaquetado y .playPublicar e importarArchivos del juegoVisibilidad y alcanceImágenes y vídeo de la fichaGéneros y etiquetasLocalizaciónJuegos instantáneos

Experiencia de juego

Carga, pausa y audioPantalla completa y zonas segurasPartidas guardadas en la nubeGrupos locales y mandos

Juega en grupo

Compartir, amigos e invitacionesClasificacionesLogrosGrupos en línea y vozServidores en tiempo real

Gana

MonetizaciónCréditos y recompensas

Recursos

Recursos de juegoGeneración de recursos con IAFormatos personalizados y creaciones de jugadores

Referencia

SDK de clienteSDK de servidorcatalogue.jsonErrores y recuperaciónSolución de problemas
DocumentaciónCarga, pausa y audio
Experiencia de juego

Ciclo de vida del juego en PlayDrop: carga, arranque, pausa y audio

Inicia el SDK, llama a ready en el primer fotograma jugable, pausa y reanuda sin fallos, respeta el audio del host y precarga para jugar sin conexión.

PlayDrop muestra su propia pantalla de carga, su menú de pausa, su control de silencio y otras ventanas alrededor de tu juego. La API del ciclo de vida mantiene el juego sincronizado con ellos: se detiene mientras PlayDrop lo pausa y solo reproduce sonido cuando la política de audio de PlayDrop lo permite.

Inicializa y después avisa de que está listo

Carga el SDK, lee el estado inicial, suscríbete a los cambios, prepara la primera pantalla y solo entonces llama a ready(). PlayDrop mantiene su pantalla de carga hasta ese momento.

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>

Llama a ready() cuando la primera pantalla diseñada se vea y los controles respondan, no antes de que carguen los recursos. sdk.host.error(message) indica a PlayDrop que el juego no puede arrancar. setLoadingState y firstFrameReady son nombres antiguos para el mismo paso; usa ready().

Fases: vista previa, partida y editor

sdk.host.phase es preview, play o editor, y onPhaseChange informa de los cambios. Las vistas previas y las capturas muestran el juego sin una sesión real: nunca escribas partidas guardadas, puntuaciones, logros ni compras fuera de play. sdk.host.mode es play normalmente y dev en el marco Dev local.

Pausa y reanudación

onPause(reason) y onResume(reason) se activan cuando el jugador abre el menú de pausa, oculta la pestaña, inicia sesión o compra algo, o cuando un anuncio o una ventana de PlayDrop cubre el juego. reason es uno de tab_hidden, auth_prompt, purchase_flow, host_overlay, detail_hidden, route_change o native_background; sdk.host.isPaused es el estado actual.

Durante la pausa, detén la simulación y los temporizadores. Al reanudar, reinicia el reloj de fotogramas para que el juego no dé un salto hacia delante:

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);

Escape y el botón Menú de un mando pertenecen al menú de pausa de PlayDrop; no los asignes en tu juego. En un juego en red, mantén activa la conexión con la sala durante la pausa: que un jugador pause no debe detener a los demás.

Audio

Lee sdk.host.audioAllowed una vez después de init() y luego sigue onAudioAllowedChange. Combina el silencio del jugador, la fase y la pausa, y sigue siendo true durante una pausa por pestaña oculta para que la música conserve su posición. onAudioPolicyChange informa de { enabled, reason, volume } cuando además necesitas el motivo o el volumen del host.

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

El audio empieza silenciado hasta que el host lo permite, y los navegadores siguen necesitando un gesto del jugador antes de reproducir sonido. Mantén cualquier ajuste de volumen del juego como un límite adicional; el silencio del host siempre tiene prioridad. Captura las promesas rechazadas de play() y resume().

Precarga y juego sin conexión en las apps

Las apps nativas pueden descargar los archivos de un juego antes de que arranque y conservarlos para jugar sin conexión. Decláralos en catalogue.json:

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

La página de entrada siempre se incluye. Los archivos required se descargan antes de jugar; los optional, después. offlineSupported: true permite que las apps ofrezcan el juego sin conexión una vez guardados sus archivos obligatorios. Los valores no válidos se ignoran y nunca bloquean una subida. La web carga los juegos como siempre. En los juegos instantáneos, los archivos obligatorios son el tamaño de inicio.

En los hosts que anuncian compatibilidad con datos en el dispositivo, las partidas guardadas, las puntuaciones y los logros conseguidos sin conexión se quedan en el dispositivo y se sincronizan cuando vuelve la conexión; las clasificaciones sin conexión muestran solo el récord del propio jugador. En un navegador no hay cola sin conexión, así que gestiona los guardados fallidos. Todo lo que el juego cargue desde internet sigue necesitando conexión.

Vibración

En las apps nativas, sdk.haptics.selection(), impact("light" | "medium" | "heavy") y notification("success" | "warning" | "error") dan una respuesta táctil breve; sdk.haptics.supported indica si el host puede hacerlo. No hacen nada en la web y son independientes del silencio.

Guías relacionadas

  • Pantalla completa y zonas segurasHaz que tu juego llene la pantalla y mantén el HUD dentro de las zonas seguras CSS y lejos de los controles del host con las reservedCorners del SDK.
  • Partidas guardadas en la nubeGuarda y carga el progreso con sdk.me.appData y sdk.me.updateAppData, para invitados y jugadores con sesión: escrituras, vistas previas y juego sin conexión.
  • Juegos instantáneosQué hace instantáneo un juego: formato vertical, acceso de invitados, hasta 10 MiB de archivos de inicio y arranque en 2 segundos, frente a un juego normal.
  • SDK de clienteSDK de navegador de PlayDrop: init, host, jugador, partidas guardadas, mandos, social, multijugador, tienda, anuncios, clasificaciones, logros, recursos e IA.
AnteriorJuegos instantáneos y juegos normales en PlayDropSiguientePantalla completa, zonas seguras y esquinas del HUD en PlayDrop
Ver Markdown
EnglishFrançaisDeutsch日本語한국어EspañolPortuguês (Brasil)Bahasa Indonesia繁體中文简体中文ItalianoPolskiNederlandsSvenskaNorsk bokmålSuomiTürkçeไทยTiếng Việtالعربية

En esta página

Inicializa y después avisa de que está listoFases: vista previa, partida y editorPausa y reanudaciónAudioPrecarga y juego sin conexión en las appsVibración
Ver Markdown