gratitude.durian.xpcool.com/wechat-miniprogram/app.js
2026-08-14 18:01:45 +08:00

150 lines
3.7 KiB
JavaScript

// app.js - 微信小程序全局逻辑
App({
onLaunch() {
// 初始化全局数据
this.globalData = {
userInfo: null,
gameData: {
currentLevel: 1,
totalScore: 0,
maxCombo: 0,
unlockedFruits: [1], // 已解锁的水果等级
items: {
bomb: 3, // 炸弹道具数量
freeze: 2, // 冰冻道具数量
hint: 5 // 提示道具数量
}
},
audioEnabled: true,
adLoaded: false
};
// 加载存档
this.loadGameData();
// 预加载广告
this.preloadAds();
},
/**
* 加载游戏存档
*/
loadGameData() {
try {
const saved = wx.getStorageSync('gameData');
if (saved) {
this.globalData.gameData = {
...this.globalData.gameData,
...saved
};
console.log('[App] 加载存档成功', this.globalData.gameData);
}
} catch (err) {
console.error('[App] 加载存档失败', err);
}
},
/**
* 保存游戏存档
*/
saveGameData() {
try {
wx.setStorageSync('gameData', this.globalData.gameData);
console.log('[App] 保存存档成功');
} catch (err) {
console.error('[App] 保存存档失败', err);
}
},
/**
* 预加载广告
*/
preloadAds() {
// 激励视频广告
if (wx.createRewardedVideoAd) {
this.globalData.rewardedVideoAd = wx.createRewardedVideoAd({
adUnitId: 'adunit-xxxxxxxxxxxxxxxx' // TODO: 替换为真实广告位ID
});
this.globalData.rewardedVideoAd.onLoad(() => {
this.globalData.adLoaded = true;
console.log('[App] 激励视频广告加载成功');
});
this.globalData.rewardedVideoAd.onError((err) => {
console.error('[App] 激励视频广告加载失败', err);
this.globalData.adLoaded = false;
});
}
// 插屏广告
if (wx.createInterstitialAd) {
this.globalData.interstitialAd = wx.createInterstitialAd({
adUnitId: 'adunit-yyyyyyyyyyyyyyyy' // TODO: 替换为真实广告位ID
});
this.globalData.interstitialAd.onLoad(() => {
console.log('[App] 插屏广告加载成功');
});
this.globalData.interstitialAd.onError((err) => {
console.error('[App] 插屏广告加载失败', err);
});
}
},
/**
* 显示激励视频广告
*/
showRewardedAd(onReward, onClose) {
if (!this.globalData.rewardedVideoAd || !this.globalData.adLoaded) {
console.warn('[App] 广告未加载,直接发放奖励');
onReward && onReward();
return;
}
this.globalData.rewardedVideoAd.show()
.then(() => {
console.log('[App] 激励视频广告开始播放');
this.globalData.rewardedVideoAd.onClose((res) => {
if (res && res.isEnded) {
console.log('[App] 用户看完广告,发放奖励');
onReward && onReward();
} else {
console.log('[App] 用户中途关闭广告');
onClose && onClose(false);
}
});
})
.catch(err => {
console.error('[App] 广告展示失败', err);
// 广告失败也发放奖励(用户体验优先)
onReward && onReward();
});
},
/**
* 显示插屏广告
*/
showInterstitialAd(onClose) {
if (!this.globalData.interstitialAd) {
onClose && onClose();
return;
}
this.globalData.interstitialAd.show()
.then(() => {
console.log('[App] 插屏广告展示成功');
})
.catch(err => {
console.error('[App] 插屏广告展示失败', err);
})
.finally(() => {
onClose && onClose();
});
},
globalData: {}
});