Gruppi locali, gamepad e telefoni come controller nei giochi PlayDrop
Leggi i gamepad fisici e i telefoni usati come controller con sdk.device, segui i posti dei giocatori locali, dichiara controller e dimensioni dei gruppi locali.
Un gruppo locale è formato da più persone che giocano sullo stesso schermo, ognuna con un controller: un gamepad fisico o un telefono che PlayDrop trasforma in controller scansionando un codice. Il tuo gioco legge ogni controller allo stesso modo tramite l’SDK, sul sito e nelle app.
Dichiara controller e dimensioni dei gruppi
{
"types": ["solo", "party"],
"party": { "local": [1, 2, 3, 4] },
"controller": { "support": "optional", "type": "simpler" }
}controller.supportvaleoff,optionalorequired. Dichiaralo per ogni gioco, compresooff.controller.typeindica i comandi minimi di cui il gioco ha bisogno:any(direzioni, Conferma e Annulla),simpler(una levetta, quattro pulsanti frontali e Menu; i telefoni usati come controller sono adatti) oppurestandard(croce direzionale, due levette cliccabili, quattro pulsanti frontali, due dorsali, due grilletti e Menu).party.localelenca i numeri esatti di giocatori sullo stesso schermo; un1richiede il tiposolo. Con il supporto ai controller attivo, ogni numero elencato deve essere giocabile con i controller.
Leggi i controller
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();- Chiama
enableControllerInput()una volta dopoinit(). Viene rifiutata concontroller_input_unavailableocontroller_input_timeoutquando l’host non può fornire l’input; il gioco continua a funzionare. gamepad(playerIndex)restituisce un’istantanea nel layout standard del browser:axes(x/y sinistra e x/y destra da -1 a 1), diciassettebuttons,source(physicalovirtual) eid.playerIndex0 è il giocatore 1.- I pulsanti hanno nomi legati alla posizione, come
southedeast.pad.label("south")fornisce l’indicazione da mostrare: «A», «Croce» o «B» a seconda del controller.pad.has("dpad")indica se un comando esiste. - Menu e Home appartengono a PlayDrop e risultano sempre rilasciati.
- Non chiamare mai
navigator.getGamepads(): i telefoni usati come controller arrivano ai giochi solo tramite l’SDK, e PlayDrop registra un avviso.
Posti dei giocatori locali
sdk.device.localPlayers elenca i posti scelti dai giocatori, { playerIndex, gamepadKey }, e onLocalPlayersChange(callback) segnala le modifiche. Un controller disconnesso mantiene il suo posto. Quando l’elenco dei giocatori cambia o si svuota, torna a un menu sensato invece di andare in crash. Un solo controller è un normale input, non un gruppo.
Da un pulsante, sdk.social.openParty({ mode: "local" }) apre la finestra di abbinamento di PlayDrop con il codice QR per i telefoni e i gamepad collegati. Offri solo le modalità che hai dichiarato.
Locale oppure online, non entrambi
L’host avvia un gioco come gruppo locale oppure come gruppo online, mai entrambi: i giocatori locali non possono entrare nelle stanze online. Per giocare online con gli amici vedi gruppi online e voce.
Pensa al divano
Mostra il colore e l’indicazione del controller di ogni giocatore, permetti a chiunque di unirsi premendo un pulsante e mantieni l’HUD leggibile dal divano. Conserva i comandi touch e da tastiera per il gioco in solitaria.