Vòng đời game trên PlayDrop: tải, sẵn sàng, tạm dừng và âm thanh
Khởi tạo SDK PlayDrop, báo sẵn sàng ở khung hình chơi được đầu tiên, tạm dừng và tiếp tục gọn gàng, theo chính sách âm thanh và tải trước tệp để chơi ngoại tuyến.
PlayDrop hiển thị màn hình tải, menu tạm dừng, nút tắt tiếng và các cửa sổ khác của riêng nó quanh game của bạn. API vòng đời giữ game đồng bộ với chúng: game dừng lại khi PlayDrop tạm dừng nó và chỉ phát âm thanh khi chính sách âm thanh của PlayDrop cho phép.
Khởi tạo, rồi báo sẵn sàng
Tải SDK, đọc trạng thái ban đầu, đăng ký theo dõi thay đổi, chuẩn bị màn hình đầu tiên và chỉ khi đó mới gọi ready(). PlayDrop giữ màn hình tải cho đến lúc đó.
<script src="https://assets.playdrop.ai/sdk/playdrop.js"></script>
<script type="module">
const sdk = await playdrop.init();
let paused = sdk.host.isPaused;
setAudio(sdk.host.audioAllowed);
sdk.host.onAudioAllowedChange(setAudio);
sdk.host.onPause(() => { paused = true; });
sdk.host.onResume(() => { paused = false; last = performance.now(); });
try {
await loadFirstLevel();
} catch (error) {
sdk.host.error("Could not load the first level");
throw error;
}
drawFirstFrame();
sdk.host.ready();
</script>Hãy gọi ready() khi màn hình đầu tiên đúng như thiết kế đã hiện ra và đầu vào đã hoạt động, không gọi trước khi tài nguyên tải xong. sdk.host.error(message) báo cho PlayDrop rằng game không thể khởi động. setLoadingState và firstFrameReady là tên cũ của cùng bước này; hãy dùng ready().
Các giai đoạn: xem trước, chơi và trình chỉnh sửa
sdk.host.phase là preview, play hoặc editor, và onPhaseChange báo khi giai đoạn chuyển đổi. Bản xem trước và bản ghi hình hiển thị game mà không có phiên chơi thật: không bao giờ ghi dữ liệu lưu, điểm, thành tích hay giao dịch mua ngoài giai đoạn play. sdk.host.mode bình thường là play và là dev trong khung Dev cục bộ.
Tạm dừng và tiếp tục
onPause(reason) và onResume(reason) được kích hoạt khi người chơi mở menu tạm dừng, ẩn tab, đăng nhập, mua thứ gì đó, hoặc khi một quảng cáo hay một cửa sổ PlayDrop che game. reason là một trong các giá trị tab_hidden, auth_prompt, purchase_flow, host_overlay, detail_hidden, route_change hoặc native_background; sdk.host.isPaused là trạng thái hiện tại.
Trong lúc tạm dừng, hãy dừng mô phỏng và bộ đếm giờ. Khi tiếp tục, hãy đặt lại đồng hồ khung hình để game không nhảy cóc về phía trước:
let last = performance.now();
function frame(now) {
const dt = paused ? 0 : Math.min((now - last) / 1000, 0.05);
last = now;
if (!paused) update(dt);
render();
requestAnimationFrame(frame);
}
requestAnimationFrame(frame);Phím Escape và nút Menu của tay cầm thuộc về menu tạm dừng của PlayDrop; đừng gán chúng trong game của bạn. Trong game có kết nối mạng, hãy giữ kết nối phòng trong lúc tạm dừng: việc một người chơi tạm dừng không được làm dừng những người khác.
Âm thanh
Đọc sdk.host.audioAllowed một lần sau init(), rồi theo dõi onAudioAllowedChange. Giá trị này kết hợp trạng thái tắt tiếng của người chơi, giai đoạn và trạng thái tạm dừng, và vẫn là true khi tạm dừng do ẩn tab để nhạc giữ được vị trí đang phát. onAudioPolicyChange báo { enabled, reason, volume } khi bạn cần thêm lý do hoặc âm lượng của host.
const audio = new AudioContext();
function setAudio(allowed) {
(allowed ? audio.resume() : audio.suspend()).catch(() => {});
}Âm thanh bắt đầu ở trạng thái tắt cho đến khi host cho phép, và trình duyệt vẫn cần một thao tác của người chơi trước khi phát âm thanh. Hãy giữ mọi cài đặt âm lượng trong game như một giới hạn bổ sung; nút tắt tiếng của host luôn được ưu tiên. Hãy bắt lỗi khi các promise play() và resume() bị từ chối.
Tải trước và chơi ngoại tuyến trong ứng dụng
Các ứng dụng gốc có thể tải tệp của game về trước khi game bắt đầu và giữ lại để chơi ngoại tuyến. Hãy khai báo chúng trong catalogue.json:
{
"prefetch": { "required": ["game.js", "assets/level-1.png"], "optional": ["assets/music.mp3"] },
"offlineSupported": true
}Trang vào luôn được bao gồm. Các tệp required được tải về trước khi chơi; các tệp optional được tải sau. offlineSupported: true cho phép ứng dụng cung cấp game ngoại tuyến khi các tệp bắt buộc của nó đã được lưu. Giá trị không hợp lệ sẽ bị bỏ qua và không bao giờ chặn việc tải lên. Trang web vẫn tải game như bình thường. Với game Instant, các tệp bắt buộc chính là kích thước khởi động.
Trên các host có hỗ trợ dữ liệu trên thiết bị, dữ liệu lưu, điểm và thành tích tạo ra khi ngoại tuyến được giữ trên thiết bị và đồng bộ khi có mạng; bảng xếp hạng ngoại tuyến chỉ hiển thị kỷ lục của chính người chơi. Trong trình duyệt không có hàng đợi ngoại tuyến, vì vậy hãy xử lý trường hợp lưu thất bại. Mọi thứ game tải từ internet vẫn cần kết nối mạng.
Phản hồi rung
Trong các ứng dụng gốc, sdk.haptics.selection(), impact("light" | "medium" | "heavy") và notification("success" | "warning" | "error") tạo phản hồi rung ngắn; sdk.haptics.supported cho biết host có hỗ trợ hay không. Chúng không có tác dụng trên web và không phụ thuộc vào trạng thái tắt tiếng.