Groupes locaux, manettes et manettes téléphone dans les jeux PlayDrop
Lisez manettes physiques et manettes téléphone PlayDrop avec sdk.device, suivez les emplacements locaux, déclarez manettes et tailles de groupe local.
Un groupe local, ce sont plusieurs personnes qui jouent sur un même écran, chacune avec une manette : une manette physique ou un téléphone que PlayDrop transforme en manette grâce à un code à scanner. Votre jeu lit toutes les manettes de la même façon avec le SDK, sur le site web comme dans les apps.
Déclarez les manettes et les tailles de groupe
{
"types": ["solo", "party"],
"party": { "local": [1, 2, 3, 4] },
"controller": { "support": "optional", "type": "simpler" }
}controller.supportvautoff,optionalourequired. Déclarez-le pour chaque jeu, y comprisoff.controller.typeindique les commandes minimales dont le jeu a besoin :any(directions, Valider et Annuler),simpler(un stick, quatre boutons d’action et Menu ; les manettes téléphone conviennent) oustandard(croix directionnelle, deux sticks cliquables, quatre boutons d’action, deux boutons de tranche, deux gâchettes et Menu).party.localliste les nombres exacts de joueurs sur un même écran ; un1exige le typesolo. Avec la prise en charge des manettes, chaque nombre listé doit être jouable avec des manettes.
Lisez les manettes
await sdk.device.enableControllerInput().catch(() => { /* keep keyboard and touch */ });
const stop = sdk.device.onButton(({ playerIndex, button, pressed }) => {
if (button === "south" && pressed) jump(playerIndex);
});
function update() {
for (const slot of sdk.device.localPlayers) {
const pad = sdk.device.gamepad(slot.playerIndex);
if (pad?.connected) move(slot.playerIndex, pad.axes[0], pad.axes[1]);
}
requestAnimationFrame(update);
}
update();- Appelez
enableControllerInput()une fois aprèsinit(). La promesse est rejetée aveccontroller_input_unavailableoucontroller_input_timeoutquand l’hôte ne peut pas fournir les commandes ; le jeu continue de tourner. gamepad(playerIndex)renvoie un état ponctuel au format standard du navigateur :axes(x/y gauche, x/y droite, de -1 à 1), dix-septbuttons,source(physicalouvirtual) etid. LeplayerIndex0 correspond au joueur 1.- Les boutons portent des noms de position comme
southeteast.pad.label("south")donne l’intitulé à afficher : « A », « Cross » ou « B » selon la manette.pad.has("dpad")indique si une commande existe. - Les boutons Menu et Accueil appartiennent à PlayDrop et sont toujours lus comme relâchés.
- N’appelez jamais
navigator.getGamepads(): les manettes téléphone n’atteignent les jeux qu’à travers le SDK, et PlayDrop journalise un avertissement.
Emplacements des joueurs locaux
sdk.device.localPlayers liste les emplacements choisis par les joueurs, { playerIndex, gamepadKey }, et onLocalPlayersChange(callback) signale les changements. Une manette déconnectée conserve son emplacement. Quand la liste des joueurs change ou se vide, revenez à un menu adapté au lieu de planter. Une manette seule est une simple commande de jeu, pas un groupe.
Depuis un bouton, sdk.social.openParty({ mode: "local" }) ouvre la fenêtre d’appairage de PlayDrop, avec le QR code pour les téléphones et les manettes connectées. Ne proposez que les modes que vous avez déclarés.
En local ou en ligne, pas les deux
L’hôte démarre un jeu soit en groupe local, soit en groupe en ligne, jamais les deux : les joueurs en local ne peuvent pas rejoindre de salles en ligne. Pour jouer en ligne avec des amis, consultez groupes en ligne et voix.
Pensez au canapé
Affichez la couleur et l’intitulé de bouton de chaque joueur, laissez chacun appuyer sur un bouton pour rejoindre la partie et gardez l’interface du jeu lisible depuis un canapé. Conservez les commandes tactiles et clavier pour le jeu en solo.