Grup lokal, gamepad, dan pengontrol ponsel di game PlayDrop
Baca gamepad fisik dan pengontrol ponsel PlayDrop lewat sdk.device, ikuti slot pemain lokal, serta deklarasikan dukungan pengontrol dan ukuran grup lokal.
Grup lokal adalah beberapa orang yang bermain di satu layar, masing-masing dengan pengontrol: gamepad fisik atau ponsel yang diubah PlayDrop menjadi pengontrol dengan memindai kode. Game Anda membaca setiap pengontrol dengan cara yang sama lewat SDK, di situs web maupun di aplikasi.
Deklarasikan pengontrol dan ukuran grup
{
"types": ["solo", "party"],
"party": { "local": [1, 2, 3, 4] },
"controller": { "support": "optional", "type": "simpler" }
}controller.supportbernilaioff,optional, ataurequired. Deklarasikan di setiap game, termasukoff.controller.typemenyebutkan kontrol minimum yang dibutuhkan game:any(arah, Konfirmasi, dan Batal),simpler(satu stik, empat tombol muka, dan Menu; pengontrol ponsel memenuhi syarat), ataustandard(D-pad, dua stik yang bisa diklik, empat tombol muka, dua tombol bahu, dua pelatuk, dan Menu).party.localmencantumkan jumlah pemain persis di satu layar; nilai1memerlukan tipesolo. Jika dukungan pengontrol aktif, setiap jumlah yang dicantumkan harus bisa dimainkan dengan pengontrol.
Baca pengontrol
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();- Panggil
enableControllerInput()sekali setelahinit(). Panggilan ini ditolak dengancontroller_input_unavailableataucontroller_input_timeoutsaat host tidak bisa menyediakan input; game tetap berjalan. gamepad(playerIndex)mengembalikan snapshot dalam tata letak standar browser:axes(x/y kiri, x/y kanan dari -1 sampai 1), tujuh belasbuttons,source(physicalatauvirtual), danid.playerIndex0 adalah pemain 1.- Tombol memiliki nama posisi seperti
southdaneast.pad.label("south")memberikan petunjuk tombol yang perlu ditampilkan: "A", "Cross", atau "B", tergantung pengontrolnya.pad.has("dpad")menunjukkan apakah sebuah kontrol tersedia. - Menu dan Home adalah milik PlayDrop dan selalu terbaca sebagai dilepas.
- Jangan pernah memanggil
navigator.getGamepads(): pengontrol ponsel hanya sampai ke game lewat SDK, dan PlayDrop mencatat peringatan.
Slot pemain lokal
sdk.device.localPlayers mencantumkan slot yang dipilih pemain, { playerIndex, gamepadKey }, dan onLocalPlayersChange(callback) melaporkan perubahannya. Pengontrol yang terputus tetap memegang slotnya. Saat daftar pemain berubah atau menjadi kosong, kembali ke menu yang masuk akal alih-alih membuat game crash. Satu pengontrol saja hanyalah input biasa, bukan grup.
Dari sebuah tombol, sdk.social.openParty({ mode: "local" }) membuka jendela pemasangan PlayDrop dengan kode QR ponsel dan gamepad yang terhubung. Tawarkan hanya mode yang sudah Anda deklarasikan.
Lokal atau online, bukan keduanya
Host memulai game sebagai grup lokal atau grup online, tidak pernah keduanya: pemain lokal tidak bisa bergabung ke room online. Untuk bermain online bersama teman, lihat grup online dan suara.
Rancang untuk bermain bersama di sofa
Tampilkan warna dan petunjuk tombol pengontrol setiap pemain, biarkan siapa pun menekan tombol untuk bergabung, dan buat HUD tetap terbaca dari sofa. Pertahankan kontrol sentuh dan keyboard untuk bermain solo.