SDK client của PlayDrop cho game trình duyệt
SDK trình duyệt tùy chọn cho game PlayDrop: đăng nhập, lưu game, bảng xếp hạng, mua hàng, quảng cáo, bạn bè, tay cầm và nhiều người chơi, với một thẻ script.
SDK PlayDrop là tùy chọn: game không có SDK vẫn chơi được trên PlayDrop. Hãy thêm nó cho các tính năng nền tảng như đăng nhập người chơi, lưu game, thành tích và bảng xếp hạng, mua bằng credit, quảng cáo, bạn bè và thẻ game trong PlayDrop Chat, liên kết chia sẻ, tạm dừng và âm thanh do host quản lý, đầu vào tay cầm, nhiều người chơi được lưu trữ và tạo bằng AI. PlayDrop Cloud tích hợp sẵn SDK cho bạn; với PlayDrop Connector, agent của bạn thêm một thẻ script.
Thêm SDK và theo vòng đời của host
<script src="https://assets.playdrop.ai/sdk/playdrop.js"></script>
<script type="module">
const sdk = await playdrop.init();
// Render the game and prepare input, then:
sdk.host.ready();
sdk.host.onPause(() => pauseGame());
sdk.host.onResume(() => resumeGame());
sdk.host.onAudioPolicyChange(({ enabled }) => setAudioEnabled(enabled));
</script>Tải SDK từ CDN của PlayDrop; không cần cài gói nào. Hiển thị khung hình chơi được đầu tiên và chuẩn bị đầu vào trước khi gọi sdk.host.ready(). Tạm dừng mô phỏng khi host tạm dừng, tiếp tục mà không tạo vòng lặp trùng lặp, và tuân theo chính sách âm thanh của host.
Danh tính, lưu game và ngôn ngữ
sdk.me cung cấp danh tính người chơi và sdk.me.appData lưu dữ liệu riêng tư; sdk.achievements và sdk.leaderboards xử lý thành tích và điểm số. Lưu game, thành tích và bảng xếp hạng hoạt động mà không cần kiểm tra đăng nhập trước. Dùng sdk.me.isLoggedIn cho các tính năng cần tài khoản thật, như mua hàng hay nhiều người chơi. Chế độ xem trước và chụp không được ghi tiến trình của người chơi. sdk.host.language cho biết ngôn ngữ của người chơi: hãy cung cấp tiếng Anh cùng ngôn ngữ của riêng bạn nếu khác tiếng Anh. Dịch trang giới thiệu không dịch nội dung game. Ở một quãng nghỉ tự nhiên, chẳng hạn khi thắng, sdk.host.requestReview() cho phép PlayDrop nhờ người chơi đánh giá, tối đa một lần cho mỗi game; game của bạn không bao giờ biết câu trả lời, vì vậy đừng thưởng cho nó.
Thư viện, tài nguyên và nhiều người chơi
sdk.libs tải các phiên bản Three.js, Phaser, Rapier, nipplejs và Colyseus được hỗ trợ. sdk.assets cung cấp tham chiếu danh mục, gói và tài nguyên; sdk.social cung cấp bạn bè, thẻ game và thao tác chia sẻ. Với nhiều người chơi được lưu trữ, sdk.multiplayer.getConnection() trả về địa chỉ máy chủ và token của người chơi đã đăng nhập; hãy tham gia bằng client Colyseus. Trang SDK server nói về máy chủ được lưu trữ; máy chủ do bạn tự chạy không cần gì từ SDK. Các API phòng relay cũ đã bị loại bỏ.
Thử với SDK trước khi xuất bản
Hãy chạy máy chủ dev quen thuộc của bạn và mở https://www.playdrop.ai/creators/<username>/apps/game/<slug>/dev?url=http://localhost:5173/ trong Chrome để chơi bên trong khung PlayDrop thật với host SDK. Cổng localhost nào hoặc URL https nào cũng được. Các tính năng cần tài khoản, như lưu game và mua hàng, hoạt động sau khi game đã được tải lên một lần; một bản tải lên riêng tư là đủ. Việc tạo media trong trình duyệt chạy dưới dạng tác vụ bất đồng bộ với chi phí credit do host xác nhận. Xem catalogue.json cho metadata trang giới thiệu.
Chơi cùng nhau
Dùng await sdk.multiplayer.join("game") trong giai đoạn chơi. Nó tham gia độc lập hoặc dùng lượt đặt chỗ nhóm chơi của host. Lỗi nhóm chơi sẽ làm lệnh gọi bị từ chối thay vì lặng lẽ tách người chơi sang phòng khác. getConnection() vẫn là API thông tin kết nối tức thì cho các game hiện có. Giữ cùng một phòng qua các vòng, và giữ kết nối mạng hoạt động trong lúc lớp phủ của host tạm dừng đầu vào game.
Dùng sdk.social.openParty() từ một thao tác của người chơi để mở cửa sổ nhóm chơi của host. Đọc thành viên bằng await sdk.social.getParty() hoặc sdk.social.onPartyChange(callback). Game không thể thay đổi nhóm chơi của nền tảng hay điều khiển micro. Thoại nhóm chơi và thoại phòng nằm ở host web/native và vẫn tuân theo sự đồng ý của người chơi, tắt tiếng, chặn và điều kiện triển khai.
Để phát lại phòng mượt mà, hãy gọi sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] }), dùng các vector { x, y, z } hữu hạn. Gợi ý chỉ ảnh hưởng đến âm lượng và panning, không bao giờ ảnh hưởng đến việc cấp quyền. Máy chủ thực thi điều kiện về đội và khoảng cách.
Dùng sdk.device.localPlayers và sdk.device.onLocalPlayersChange(callback) cho các ô tay cầm cục bộ đã chọn { playerIndex, gamepadKey }. Danh sách tay cầm đang kết nối là riêng biệt; một ô bị ngắt kết nối vẫn giữ danh tính của nó. Chế độ cục bộ không thể tham gia phòng trực tuyến. Công thức có thể sao chép playdrop-metagame/recipes/play-together minh họa cả hai chế độ, hai điểm đến và chính sách phòng.
Tay cầm
Đọc tay cầm vật lý và tay cầm điện thoại PlayDrop qua sdk.device, giống nhau trên mọi nền tảng. Gọi enableControllerInput() một lần sau init(), đọc gamepad(playerIndex) trong vòng lặp game (0 là P1), và dùng onButton cho các lần nhấn và thả. Trục và nút theo thứ tự gamepad chuẩn của trình duyệt; các nút có tên theo vị trí như south và east, và pad.label("south") trả về nhãn của tay cầm đó, chẳng hạn "A" hoặc "Cross". Menu thuộc về PlayDrop và tạm dừng game.
await sdk.device.enableControllerInput();
const stop = sdk.device.onButton(({ playerIndex, button, pressed }) => {
if (button === "south" && pressed) jump(playerIndex);
});
function update() {
const pad = sdk.device.gamepad(0);
if (pad?.connected) move(pad.axes[0], pad.axes[1]);
requestAnimationFrame(update);
}
update();Đừng gọi navigator.getGamepads(): tay cầm điện thoại chỉ đến được game qua SDK, và PlayDrop ghi cảnh báo khi một game đọc trực tiếp API của trình duyệt. Nếu host không cung cấp được đầu vào tay cầm, enableControllerInput() bị từ chối với controller_input_unavailable hoặc controller_input_timeout và game vẫn tiếp tục chạy. pad.has("dpad") cho biết một điều khiển có tồn tại hay không; hãy khai báo các điều khiển game của bạn cần trong catalogue.json.