Grupy lokalne, gamepady i kontrolery na telefonie w grach PlayDrop
Odczytuj gamepady i kontrolery PlayDrop na telefonie przez sdk.device, śledź lokalne sloty graczy, deklaruj obsługę kontrolerów i rozmiary grup lokalnych.
Grupa lokalna to kilka osób grających na jednym ekranie, każda z kontrolerem: fizycznym gamepadem albo telefonem, który PlayDrop zamienia w kontroler po zeskanowaniu kodu. Twoja gra odczytuje każdy kontroler tak samo przez SDK, na stronie internetowej i w aplikacjach.
Zadeklaruj kontrolery i rozmiary grup
{
"types": ["solo", "party"],
"party": { "local": [1, 2, 3, 4] },
"controller": { "support": "optional", "type": "simpler" }
}controller.supportma wartośćoff,optionallubrequired. Deklaruj je w każdej grze, takżeoff.controller.typeokreśla minimalne sterowanie, którego potrzebuje gra:any(kierunki, Confirm i Cancel),simpler(jeden drążek, cztery przyciski czołowe i Menu; spełniają to kontrolery na telefonie) lubstandard(krzyżak, dwa klikalne drążki, cztery przyciski czołowe, dwa przyciski ramieniowe, dwa spusty i Menu).party.localwymienia dokładne liczby graczy na jednym ekranie;1wymaga typusolo. Przy włączonej obsłudze kontrolerów każda wymieniona liczba musi być grywalna z kontrolerami.
Odczytuj kontrolery
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();- Wywołaj
enableControllerInput()raz poinit(). Gdy host nie może dostarczyć wejścia, wywołanie zostaje odrzucone zcontroller_input_unavailablelubcontroller_input_timeout; gra działa dalej. gamepad(playerIndex)zwraca migawkę w standardowym układzie przeglądarki:axes(lewy x/y, prawy x/y od -1 do 1), siedemnaściebuttons,source(physicallubvirtual) iid.playerIndex0 to gracz 1.- Przyciski mają nazwy pozycyjne, takie jak
southieast.pad.label("south")podaje podpowiedź do wyświetlenia: „A”, „Cross” lub „B” w zależności od kontrolera.pad.has("dpad")mówi, czy dany element sterowania istnieje. - Menu i Home należą do PlayDrop i zawsze są odczytywane jako zwolnione.
- Nigdy nie wywołuj
navigator.getGamepads(): kontrolery na telefonie docierają do gier tylko przez SDK, a PlayDrop zapisuje ostrzeżenie.
Lokalne sloty graczy
sdk.device.localPlayers wymienia sloty wybrane przez graczy, { playerIndex, gamepadKey }, a onLocalPlayersChange(callback) zgłasza zmiany. Odłączony kontroler zachowuje swój slot. Gdy skład graczy się zmienia lub staje się pusty, wróć do sensownego menu zamiast się zawieszać. Jeden kontroler sam w sobie to zwykłe wejście, a nie grupa.
Wywołane po naciśnięciu przycisku w grze sdk.social.openParty({ mode: "local" }) otwiera okno parowania PlayDrop z kodem QR dla telefonów i podłączonymi gamepadami. Oferuj tylko te tryby, które zadeklarowano.
Lokalnie albo online, nigdy oba naraz
Host uruchamia grę albo jako grupę lokalną, albo jako grupę online, nigdy obie naraz: gracze lokalni nie mogą dołączać do pokoi online. Grę online ze znajomymi opisuje poradnik grupy online i głos.
Projektuj z myślą o kanapie
Pokazuj kolor każdego gracza i podpowiedzi dla jego kontrolera, pozwól każdemu dołączyć naciśnięciem przycisku i dbaj o to, by interfejs był czytelny z kanapy. Zachowaj sterowanie dotykowe i klawiaturą do gry w pojedynkę.