作品开发
信号量总览
Web 原生作品建议固定走这条链路:
init:接收平台初始化参数ready:资源与状态准备完成,通知平台可开始start:收到平台开始信号后进入正式运行end:作品结束后回传结果
完整代码示例(可直接改造)
import NianxieInteractionSDK from '@nianxie/nianxie-interaction-sdk';
const sdk = NianxieInteractionSDK.createNianxieInteractionSDK({
source: 'webview',
defaultTimeoutMs: 10000,
});
let started = false;
let ended = false;
async function preloadAssets() {
// TODO: 预加载贴图/音频/配置
}
async function bootstrapState() {
// TODO: 初始化状态机、存档、关卡参数
}
function unlockInput() {
// TODO: 开启输入
}
function startMainLoop() {
// TODO: 启动主循环
}
export async function finishGame(score: number, win: boolean) {
if (ended) return;
ended = true;
await sdk.sendEnd({
extras: { score, win, result: win ? 'success' : 'failed' },
});
}
// [init] 收到 OnMiniInit 后进入该回调:只做准备,不启动正式交互
sdk.onInit(async () => {
await preloadAssets();
await bootstrapState();
// [ready] 准备完成后上报 NianxieMiniReady
await sdk.sendReady({
extras: { stage: 'game-paused-await-start' },
});
});
// [start] 收到 OnMiniStart 后进入该回调:开启运行逻辑
sdk.onStart(() => {
if (started) return;
started = true;
unlockInput();
startMainLoop();
});
开发约束与提审建议
- 信号量是必选协议,必须完整走完:
OnMiniInit -> NianxieMiniReady -> OnMiniStart -> NianxieMiniEnd - 缺少任意信号都可能导致超时、无法开始、无法结束或校验失败
- 业务结果建议放在
extras中统一回传,便于平台解析
可参考官方仓库:
常见错误统一见:常见问题