150 lines
3.7 KiB
JavaScript
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: {}
|
|
});
|