PlayDrop client-SDK voor browsergames
Optionele browser-SDK voor elke PlayDrop-game: inloggen, saves, ranglijsten, aankopen, advertenties, vrienden, controllers en multiplayer met één scripttag.
De PlayDrop-SDK is optioneel: games zonder SDK spelen gewoon op PlayDrop. Voeg hem toe voor platformfuncties zoals inloggen van spelers, saves, prestaties en ranglijsten, aankopen met credits, advertenties, vrienden en gamekaarten in PlayDrop Chat, deellinks, door de host beheerde pauze en audio, controllerinvoer, gehoste multiplayer en AI-generatie. PlayDrop Cloud bouwt hem voor je in; met PlayDrop Connector voegt je agent één scripttag toe.
Voeg de SDK toe en volg de levenscyclus van de host
<script src="https://assets.playdrop.ai/sdk/playdrop.js"></script>
<script type="module">
const sdk = await playdrop.init();
// Render the game and prepare input, then:
sdk.host.ready();
sdk.host.onPause(() => pauseGame());
sdk.host.onResume(() => resumeGame());
sdk.host.onAudioPolicyChange(({ enabled }) => setAudioEnabled(enabled));
</script>Laad de SDK vanaf het CDN van PlayDrop; installeren van een pakket is niet nodig. Render het eerste speelbare frame en maak de invoer klaar voordat je sdk.host.ready() aanroept. Pauzeer de simulatie bij een pauze van de host, hervat zonder dubbele lussen en volg het audiobeleid van de host.
Identiteit, saves en taal
sdk.me toont de identiteit van de speler en sdk.me.appData slaat privésaves op; sdk.achievements en sdk.leaderboards regelen prestaties en scores. Saves, prestaties en ranglijsten werken zonder voorafgaande logincontrole. Gebruik sdk.me.isLoggedIn voor functies die een echt account vereisen, zoals aankopen of multiplayer. Voorbeeld- en opnamemodi mogen geen voortgang van spelers wegschrijven. sdk.host.language geeft de taal van de speler: lever Engels plus je eigen taal als die anders is. Een vertaalde gamepagina vertaalt de inhoud van de game niet. Op een natuurlijk moment, zoals een overwinning, laat sdk.host.requestReview() PlayDrop de speler om een review vragen, hoogstens één keer per game; je game komt het antwoord nooit te weten, dus beloon het nooit.
Bibliotheken, assets en multiplayer
sdk.libs laadt ondersteunde versies van Three.js, Phaser, Rapier, nipplejs en Colyseus. sdk.assets biedt verwijzingen naar catalogus, pakketten en assets; sdk.social biedt vrienden, gamekaarten en deelacties. Voor gehoste multiplayer geeft sdk.multiplayer.getConnection() het serveradres en het token van de ingelogde speler terug; doe mee met de Colyseus-client. De pagina over de server-SDK behandelt gehoste servers; een server die je zelf draait heeft niets van de SDK nodig. De oude relay-room-API’s zijn buiten gebruik gesteld.
Test met de SDK voordat je publiceert
Draai je gebruikelijke devserver en open https://www.playdrop.ai/creators/<username>/apps/game/<slug>/dev?url=http://localhost:5173/ in Chrome om hem in het echte PlayDrop-frame met de SDK-host te spelen. Elke localhost-poort of https-URL werkt. Functies die een account nodig hebben, zoals saves en aankopen, werken zodra de game één keer is geüpload; een privé-upload is genoeg. Het genereren van media in de browser draait als asynchrone taken met door de host bevestigde creditkosten. Zie catalogue.json voor metadata van de gamepagina.
Samen spelen
Gebruik await sdk.multiplayer.join("game") in de speelfase. Het sluit zelfstandig aan of gebruikt de groepsreservering van de host. Een mislukte groep wordt geweigerd in plaats van spelers stilletjes over een andere room te verdelen. getConnection() blijft de directe API voor verbindingsgegevens bij bestaande games. Houd dezelfde room aan over rondes heen en houd het netwerk actief terwijl overlays van de host de spelerinvoer pauzeren.
Gebruik sdk.social.openParty() vanuit een actie van de speler om de groepspopup van de host te openen. Lees het lidmaatschap met await sdk.social.getParty() of sdk.social.onPartyChange(callback). Games kunnen platformgroepen niet wijzigen en microfoons niet besturen. Groeps- en roomspraak draaien in de web-/native host en blijven onderhevig aan toestemming van spelers, dempen, blokkades en geschiktheid voor de uitrol.
Roep voor soepele roomweergave sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] }) aan met eindige { x, y, z }-vectoren. Hints beïnvloeden volume en panning, nooit autorisatie. De server handhaaft teams en geschiktheid op afstand.
Gebruik sdk.device.localPlayers en sdk.device.onLocalPlayersChange(callback) voor de gekozen lokale controllerslots { playerIndex, gamepadKey }. De inventaris van verbonden controllers staat los hiervan; een losgekoppeld slot behoudt zijn identiteit. De lokale modus kan niet meedoen aan online rooms. Het kopieerbare recept playdrop-metagame/recipes/play-together toont beide modi, twee bestemmingen en roombeleid.
Controllers
Lees fysieke controllers en PlayDrop-telefooncontrollers via sdk.device, op elk platform op dezelfde manier. Roep na init() één keer enableControllerInput() aan, lees gamepad(playerIndex) in de gamelus (0 is P1) en gebruik onButton voor indrukken en loslaten. Assen en knoppen volgen de standaardgamepadvolgorde van de browser; knoppen hebben positienamen zoals south en east en pad.label("south") geeft de aanduiding voor die controller, zoals "A" of "Cross". Menu is van PlayDrop en pauzeert de game.
await sdk.device.enableControllerInput();
const stop = sdk.device.onButton(({ playerIndex, button, pressed }) => {
if (button === "south" && pressed) jump(playerIndex);
});
function update() {
const pad = sdk.device.gamepad(0);
if (pad?.connected) move(pad.axes[0], pad.axes[1]);
requestAnimationFrame(update);
}
update();Roep navigator.getGamepads() niet aan: telefooncontrollers bereiken games alleen via de SDK en PlayDrop logt een waarschuwing als een game de browser-API rechtstreeks leest. Kan de host geen controllerinvoer leveren, dan weigert enableControllerInput() met controller_input_unavailable of controller_input_timeout en blijft de game draaien. pad.has("dpad") laat weten of een besturingselement bestaat; geef de besturing die je game nodig heeft op in catalogue.json.