跳到主要内容

作品开发

信号量总览

Web 原生作品建议固定走这条链路:

  1. init:接收平台初始化参数
  2. ready:资源与状态准备完成,通知平台可开始
  3. start:收到平台开始信号后进入正式运行
  4. 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 中统一回传,便于平台解析

可参考官方仓库:

常见错误统一见:常见问题