Lokale groepen, gamepads en telefooncontrollers in PlayDrop-games
Lees fysieke gamepads en PlayDrop-telefooncontrollers via sdk.device, volg lokale spelersplaatsen en geef controllerondersteuning en lokale groepsgroottes op.
Een lokale groep bestaat uit meerdere mensen die op één scherm spelen, elk met een controller: een fysieke gamepad of een telefoon die PlayDrop met het scannen van een code in een controller verandert. Je game leest elke controller op dezelfde manier via de SDK, op de website en in de apps.
Controllers en groepsgroottes opgeven
{
"types": ["solo", "party"],
"party": { "local": [1, 2, 3, 4] },
"controller": { "support": "optional", "type": "simpler" }
}controller.supportisoff,optionalofrequired. Geef het op bij elke game, ookoff.controller.typenoemt de minimale besturing die de game nodig heeft:any(richtingen, Bevestigen en Annuleren),simpler(één stick, vier frontknoppen en Menu; telefooncontrollers voldoen) ofstandard(D-pad, twee indrukbare sticks, vier frontknoppen, twee schouderknoppen, twee triggers en Menu).party.localsomt de exacte aantallen spelers op één scherm op; een1vereist het typesolo. Met controllerondersteuning aan moet elk genoemd aantal met controllers speelbaar zijn.
Controllers lezen
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();- Roep
enableControllerInput()één keer aan nainit(). Het weigert metcontroller_input_unavailableofcontroller_input_timeoutals de host geen invoer kan leveren; de game blijft draaien. gamepad(playerIndex)geeft een momentopname in de standaardindeling van de browser:axes(links x/y, rechts x/y van -1 tot 1), zeventienbuttons,source(physicalofvirtual) enid.playerIndex0 is speler 1.- Knoppen hebben positienamen zoals
southeneast.pad.label("south")geeft de aanduiding om te tonen: "A", "Cross" of "B", afhankelijk van de controller.pad.has("dpad")laat weten of een besturingselement bestaat. - Menu en Home zijn van PlayDrop en lezen altijd als losgelaten.
- Roep nooit
navigator.getGamepads()aan: telefooncontrollers bereiken games alleen via de SDK, en PlayDrop logt een waarschuwing.
Lokale spelersplaatsen
sdk.device.localPlayers somt de plaatsen op die spelers hebben gekozen, { playerIndex, gamepadKey }, en onLocalPlayersChange(callback) meldt wijzigingen. Een losgekoppelde controller behoudt zijn plaats. Als de bezetting verandert of leeg raakt, ga dan terug naar een logisch menu in plaats van te crashen. Eén controller op zichzelf is gewone invoer, geen groep.
Vanuit een knop opent sdk.social.openParty({ mode: "local" }) het koppelvenster van PlayDrop met de QR-code voor telefoons en de verbonden gamepads. Bied alleen de modi aan die je hebt opgegeven.
Lokaal of online, niet allebei
De host start een game als lokale groep of als onlinegroep, nooit allebei: lokale spelers kunnen niet meedoen in onlinekamers. Voor online spelen met vrienden, zie onlinegroepen en spraak.
Ontwerp voor de bank
Toon de kleur en de knopaanduiding van elke speler, laat iedereen met een druk op een knop meedoen en houd de HUD leesbaar vanaf de bank. Behoud aanraak- en toetsenbordbesturing voor solo spelen.