|
|
@@ -1,700 +0,0 @@
|
|
|
-/**
|
|
|
- * 新手引导插件高级使用示例
|
|
|
- * 演示自定义引导步骤、复杂条件判断和动态引导流程
|
|
|
- */
|
|
|
-
|
|
|
-import { GuideManager } from "../scripts/GuideManager";
|
|
|
-import { GuideStep } from "../scripts/GuideStep";
|
|
|
-import { ClickGuideStep, DragGuideStep, DialogGuideStep, WaitConditionGuideStep } from "../scripts/GuideSteps";
|
|
|
-
|
|
|
-const { ccclass, property } = cc._decorator;
|
|
|
-
|
|
|
-/**
|
|
|
- * 自定义引导步骤:商店购买引导
|
|
|
- */
|
|
|
-class ShopBuyGuideStep extends GuideStep {
|
|
|
- private shopItemId: string;
|
|
|
- private requiredCoins: number;
|
|
|
-
|
|
|
- constructor(stepId: string, shopItemId: string, requiredCoins: number) {
|
|
|
- super(stepId);
|
|
|
- this.shopItemId = shopItemId;
|
|
|
- this.requiredCoins = requiredCoins;
|
|
|
- }
|
|
|
-
|
|
|
- canTrigger(): boolean {
|
|
|
- // 检查玩家是否有足够金币
|
|
|
- const gameData = this.getGameData();
|
|
|
- return gameData.coins >= this.requiredCoins;
|
|
|
- }
|
|
|
-
|
|
|
- execute(): void {
|
|
|
- console.log(`开始商店购买引导: ${this.shopItemId}`);
|
|
|
-
|
|
|
- // 高亮商店按钮
|
|
|
- const shopButton = cc.find("Canvas/UI/ShopButton");
|
|
|
- if (shopButton) {
|
|
|
- this.highlightNode(shopButton);
|
|
|
- }
|
|
|
-
|
|
|
- // 显示购买提示
|
|
|
- this.showBuyTip();
|
|
|
-
|
|
|
- // 监听购买事件
|
|
|
- cc.systemEvent.on("item_purchased", this.onItemPurchased, this);
|
|
|
- }
|
|
|
-
|
|
|
- private showBuyTip(): void {
|
|
|
- const tipText = `使用 ${this.requiredCoins} 金币购买 ${this.shopItemId}`;
|
|
|
- // 这里可以显示自定义的提示UI
|
|
|
- console.log(tipText);
|
|
|
- }
|
|
|
-
|
|
|
- private onItemPurchased(itemId: string): void {
|
|
|
- if (itemId === this.shopItemId) {
|
|
|
- this.complete();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- onComplete(): void {
|
|
|
- // 清理事件监听
|
|
|
- cc.systemEvent.off("item_purchased", this.onItemPurchased, this);
|
|
|
-
|
|
|
- // 移除高亮
|
|
|
- const shopButton = cc.find("Canvas/UI/ShopButton");
|
|
|
- if (shopButton) {
|
|
|
- this.removeHighlight(shopButton);
|
|
|
- }
|
|
|
-
|
|
|
- console.log(`商店购买引导完成: ${this.shopItemId}`);
|
|
|
- }
|
|
|
-
|
|
|
- private getGameData(): any {
|
|
|
- // 获取游戏数据的示例方法
|
|
|
- return {
|
|
|
- coins: 1000, // 示例数据
|
|
|
- level: 5
|
|
|
- };
|
|
|
- }
|
|
|
-
|
|
|
- private highlightNode(node: cc.Node): void {
|
|
|
- // 添加高亮效果的示例实现
|
|
|
- const highlight = new cc.Node("Highlight");
|
|
|
- const graphics = highlight.addComponent(cc.Graphics);
|
|
|
-
|
|
|
- graphics.strokeColor = cc.Color.YELLOW;
|
|
|
- graphics.lineWidth = 3;
|
|
|
- graphics.rect(-node.width/2, -node.height/2, node.width, node.height);
|
|
|
- graphics.stroke();
|
|
|
-
|
|
|
- node.addChild(highlight);
|
|
|
- }
|
|
|
-
|
|
|
- private removeHighlight(node: cc.Node): void {
|
|
|
- const highlight = node.getChildByName("Highlight");
|
|
|
- if (highlight) {
|
|
|
- highlight.removeFromParent();
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 自定义引导步骤:多选择引导
|
|
|
- */
|
|
|
-class MultiChoiceGuideStep extends GuideStep {
|
|
|
- private choices: Array<{id: string, text: string, target: string}>;
|
|
|
- private selectedChoice: string = null;
|
|
|
-
|
|
|
- constructor(stepId: string, choices: Array<{id: string, text: string, target: string}>) {
|
|
|
- super(stepId);
|
|
|
- this.choices = choices;
|
|
|
- }
|
|
|
-
|
|
|
- canTrigger(): boolean {
|
|
|
- // 检查所有选择目标是否都存在
|
|
|
- return this.choices.every(choice => cc.find(choice.target) !== null);
|
|
|
- }
|
|
|
-
|
|
|
- execute(): void {
|
|
|
- console.log("开始多选择引导");
|
|
|
-
|
|
|
- // 显示选择UI
|
|
|
- this.showChoiceUI();
|
|
|
-
|
|
|
- // 高亮所有选择项
|
|
|
- this.choices.forEach(choice => {
|
|
|
- const target = cc.find(choice.target);
|
|
|
- if (target) {
|
|
|
- this.addChoiceListener(target, choice.id);
|
|
|
- this.highlightChoice(target);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- private showChoiceUI(): void {
|
|
|
- // 创建选择提示UI
|
|
|
- const choiceUI = new cc.Node("ChoiceUI");
|
|
|
- const label = choiceUI.addComponent(cc.Label);
|
|
|
- label.string = "请选择一个操作:";
|
|
|
- label.fontSize = 24;
|
|
|
-
|
|
|
- // 添加到场景中
|
|
|
- const canvas = cc.find("Canvas");
|
|
|
- if (canvas) {
|
|
|
- canvas.addChild(choiceUI);
|
|
|
- choiceUI.setPosition(0, 200);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private addChoiceListener(target: cc.Node, choiceId: string): void {
|
|
|
- const listener = () => {
|
|
|
- this.selectedChoice = choiceId;
|
|
|
- this.complete();
|
|
|
- };
|
|
|
-
|
|
|
- target.on(cc.Node.EventType.TOUCH_END, listener);
|
|
|
-
|
|
|
- // 保存监听器引用以便后续清理
|
|
|
- target['_guideListener'] = listener;
|
|
|
- }
|
|
|
-
|
|
|
- private highlightChoice(target: cc.Node): void {
|
|
|
- // 添加选择高亮效果
|
|
|
- const pulse = cc.tween(target)
|
|
|
- .to(0.5, { scale: 1.1 })
|
|
|
- .to(0.5, { scale: 1.0 })
|
|
|
- .union()
|
|
|
- .repeatForever();
|
|
|
-
|
|
|
- pulse.start();
|
|
|
- target['_guideTween'] = pulse;
|
|
|
- }
|
|
|
-
|
|
|
- onComplete(): void {
|
|
|
- console.log(`多选择引导完成,选择了: ${this.selectedChoice}`);
|
|
|
-
|
|
|
- // 清理所有监听器和动画
|
|
|
- this.choices.forEach(choice => {
|
|
|
- const target = cc.find(choice.target);
|
|
|
- if (target) {
|
|
|
- // 移除监听器
|
|
|
- if (target['_guideListener']) {
|
|
|
- target.off(cc.Node.EventType.TOUCH_END, target['_guideListener']);
|
|
|
- delete target['_guideListener'];
|
|
|
- }
|
|
|
-
|
|
|
- // 停止动画
|
|
|
- if (target['_guideTween']) {
|
|
|
- target['_guideTween'].stop();
|
|
|
- delete target['_guideTween'];
|
|
|
- target.scale = 1.0;
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- // 移除选择UI
|
|
|
- const choiceUI = cc.find("Canvas/ChoiceUI");
|
|
|
- if (choiceUI) {
|
|
|
- choiceUI.removeFromParent();
|
|
|
- }
|
|
|
-
|
|
|
- // 保存选择结果
|
|
|
- this.setStepData("selectedChoice", this.selectedChoice);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-@ccclass
|
|
|
-export default class AdvancedExample extends cc.Component {
|
|
|
-
|
|
|
- @property(cc.Node)
|
|
|
- shopButton: cc.Node = null;
|
|
|
-
|
|
|
- @property(cc.Node)
|
|
|
- upgradeButton: cc.Node = null;
|
|
|
-
|
|
|
- @property(cc.Node)
|
|
|
- settingsButton: cc.Node = null;
|
|
|
-
|
|
|
- @property(cc.Label)
|
|
|
- coinsLabel: cc.Label = null;
|
|
|
-
|
|
|
- private _guideManager: GuideManager;
|
|
|
- private _gameData = {
|
|
|
- coins: 500,
|
|
|
- level: 1,
|
|
|
- hasShopItem: false,
|
|
|
- tutorialCompleted: false
|
|
|
- };
|
|
|
-
|
|
|
- onLoad() {
|
|
|
- this.initAdvancedGuideSystem();
|
|
|
- this.setupGameLogic();
|
|
|
- }
|
|
|
-
|
|
|
- start() {
|
|
|
- // 根据游戏状态决定引导流程
|
|
|
- this.startConditionalGuide();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 初始化高级引导系统
|
|
|
- */
|
|
|
- private initAdvancedGuideSystem(): void {
|
|
|
- this._guideManager = GuideManager.getInstance();
|
|
|
- this._guideManager.init();
|
|
|
-
|
|
|
- // 注册复杂的引导流程
|
|
|
- this.registerAdvancedGuideFlow();
|
|
|
-
|
|
|
- // 设置动态条件检查
|
|
|
- this.setupDynamicConditions();
|
|
|
-
|
|
|
- // 监听游戏事件
|
|
|
- this.setupGameEventListeners();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 注册高级引导流程
|
|
|
- */
|
|
|
- private registerAdvancedGuideFlow(): void {
|
|
|
- // 分支引导:根据玩家选择决定后续流程
|
|
|
- const branchStep = new MultiChoiceGuideStep("choose_path", [
|
|
|
- { id: "shop", text: "商店购买", target: "Canvas/UI/ShopButton" },
|
|
|
- { id: "upgrade", text: "升级系统", target: "Canvas/UI/UpgradeButton" },
|
|
|
- { id: "settings", text: "游戏设置", target: "Canvas/UI/SettingsButton" }
|
|
|
- ]);
|
|
|
- this._guideManager.registerStep(branchStep);
|
|
|
-
|
|
|
- // 商店流程
|
|
|
- this.registerShopFlow();
|
|
|
-
|
|
|
- // 升级流程
|
|
|
- this.registerUpgradeFlow();
|
|
|
-
|
|
|
- // 设置流程
|
|
|
- this.registerSettingsFlow();
|
|
|
-
|
|
|
- // 条件步骤:等待金币达到要求
|
|
|
- const waitCoinsStep = new WaitConditionGuideStep(
|
|
|
- "wait_enough_coins",
|
|
|
- () => this._gameData.coins >= 1000,
|
|
|
- 60000, // 60秒超时
|
|
|
- "收集 1000 金币来解锁高级功能"
|
|
|
- );
|
|
|
- this._guideManager.registerStep(waitCoinsStep);
|
|
|
-
|
|
|
- // 动态步骤:根据之前的选择执行不同逻辑
|
|
|
- const dynamicStep = new class extends GuideStep {
|
|
|
- constructor(private parent: AdvancedExample) {
|
|
|
- super("dynamic_step");
|
|
|
- }
|
|
|
-
|
|
|
- canTrigger(): boolean {
|
|
|
- const branchData = this.getStepData("choose_path");
|
|
|
- return branchData && branchData.selectedChoice;
|
|
|
- }
|
|
|
-
|
|
|
- execute(): void {
|
|
|
- const branchData = this.getStepData("choose_path");
|
|
|
- const choice = branchData.selectedChoice;
|
|
|
-
|
|
|
- console.log(`执行动态步骤,基于选择: ${choice}`);
|
|
|
-
|
|
|
- // 根据选择执行不同的逻辑
|
|
|
- switch (choice) {
|
|
|
- case "shop":
|
|
|
- this.parent.executeShopLogic();
|
|
|
- break;
|
|
|
- case "upgrade":
|
|
|
- this.parent.executeUpgradeLogic();
|
|
|
- break;
|
|
|
- case "settings":
|
|
|
- this.parent.executeSettingsLogic();
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- // 延迟完成,模拟异步操作
|
|
|
- setTimeout(() => this.complete(), 2000);
|
|
|
- }
|
|
|
- }(this);
|
|
|
-
|
|
|
- this._guideManager.registerStep(dynamicStep);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 注册商店流程
|
|
|
- */
|
|
|
- private registerShopFlow(): void {
|
|
|
- // 商店购买引导
|
|
|
- const shopBuyStep = new ShopBuyGuideStep("shop_buy", "power_up", 200);
|
|
|
- this._guideManager.registerStep(shopBuyStep);
|
|
|
-
|
|
|
- // 购买后的确认步骤
|
|
|
- const confirmBuyStep = new WaitConditionGuideStep(
|
|
|
- "confirm_purchase",
|
|
|
- () => this._gameData.hasShopItem,
|
|
|
- 10000,
|
|
|
- "确认购买完成"
|
|
|
- );
|
|
|
- this._guideManager.registerStep(confirmBuyStep);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 注册升级流程
|
|
|
- */
|
|
|
- private registerUpgradeFlow(): void {
|
|
|
- const upgradeStep = new ClickGuideStep("upgrade_click", "Canvas/UI/UpgradeButton");
|
|
|
- this._guideManager.registerStep(upgradeStep);
|
|
|
-
|
|
|
- const upgradeWaitStep = new WaitConditionGuideStep(
|
|
|
- "wait_upgrade",
|
|
|
- () => this._gameData.level >= 2,
|
|
|
- 15000,
|
|
|
- "等待升级完成"
|
|
|
- );
|
|
|
- this._guideManager.registerStep(upgradeWaitStep);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 注册设置流程
|
|
|
- */
|
|
|
- private registerSettingsFlow(): void {
|
|
|
- const settingsStep = new ClickGuideStep("settings_click", "Canvas/UI/SettingsButton");
|
|
|
- this._guideManager.registerStep(settingsStep);
|
|
|
-
|
|
|
- const settingsDialogStep = new DialogGuideStep(
|
|
|
- "settings_info",
|
|
|
- "在设置中,你可以调整音效、画质等选项来优化游戏体验。"
|
|
|
- );
|
|
|
- this._guideManager.registerStep(settingsDialogStep);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置动态条件检查
|
|
|
- */
|
|
|
- private setupDynamicConditions(): void {
|
|
|
- // 定期检查游戏状态,触发相应的引导步骤
|
|
|
- this.schedule(() => {
|
|
|
- this.checkGuideConditions();
|
|
|
- }, 1.0); // 每秒检查一次
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 检查引导条件
|
|
|
- */
|
|
|
- private checkGuideConditions(): void {
|
|
|
- const currentStep = this._guideManager.getCurrentStep();
|
|
|
-
|
|
|
- // 如果当前没有活跃的引导步骤,检查是否需要触发新的步骤
|
|
|
- if (!currentStep) {
|
|
|
- // 根据游戏状态决定下一个引导步骤
|
|
|
- if (this._gameData.coins >= 1000 && !this._gameData.tutorialCompleted) {
|
|
|
- this._guideManager.triggerStep("wait_enough_coins");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 检查并触发下一步
|
|
|
- this._guideManager.checkAndTriggerNextStep();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置游戏事件监听
|
|
|
- */
|
|
|
- private setupGameEventListeners(): void {
|
|
|
- // 监听金币变化
|
|
|
- cc.systemEvent.on("coins_changed", this.onCoinsChanged, this);
|
|
|
-
|
|
|
- // 监听等级变化
|
|
|
- cc.systemEvent.on("level_changed", this.onLevelChanged, this);
|
|
|
-
|
|
|
- // 监听物品购买
|
|
|
- cc.systemEvent.on("item_purchased", this.onItemPurchased, this);
|
|
|
-
|
|
|
- // 监听引导事件
|
|
|
- this._guideManager.on('step_started', this.onStepStarted, this);
|
|
|
- this._guideManager.on('step_completed', this.onStepCompleted, this);
|
|
|
- this._guideManager.on('guide_completed', this.onGuideCompleted, this);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置游戏逻辑
|
|
|
- */
|
|
|
- private setupGameLogic(): void {
|
|
|
- // 商店按钮
|
|
|
- if (this.shopButton) {
|
|
|
- this.shopButton.on(cc.Node.EventType.TOUCH_END, this.onShopButtonClick, this);
|
|
|
- }
|
|
|
-
|
|
|
- // 升级按钮
|
|
|
- if (this.upgradeButton) {
|
|
|
- this.upgradeButton.on(cc.Node.EventType.TOUCH_END, this.onUpgradeButtonClick, this);
|
|
|
- }
|
|
|
-
|
|
|
- // 设置按钮
|
|
|
- if (this.settingsButton) {
|
|
|
- this.settingsButton.on(cc.Node.EventType.TOUCH_END, this.onSettingsButtonClick, this);
|
|
|
- }
|
|
|
-
|
|
|
- // 定期增加金币(模拟游戏收益)
|
|
|
- this.schedule(() => {
|
|
|
- this.addCoins(10);
|
|
|
- }, 2.0);
|
|
|
-
|
|
|
- this.updateUI();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 开始条件引导
|
|
|
- */
|
|
|
- private startConditionalGuide(): void {
|
|
|
- const dataManager = this._guideManager.getDataManager();
|
|
|
-
|
|
|
- // 检查是否是新用户或未完成引导
|
|
|
- if (dataManager.isNewUser() || !dataManager.isGuideCompleted()) {
|
|
|
- // 根据游戏进度决定从哪个步骤开始
|
|
|
- const savedProgress = dataManager.getGuideProgress();
|
|
|
-
|
|
|
- if (savedProgress.completedSteps.length === 0) {
|
|
|
- // 新用户,从选择分支开始
|
|
|
- this._guideManager.triggerStep("choose_path");
|
|
|
- } else {
|
|
|
- // 继续之前的进度
|
|
|
- this._guideManager.resumeGuide();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 游戏逻辑方法
|
|
|
- private addCoins(amount: number): void {
|
|
|
- this._gameData.coins += amount;
|
|
|
- cc.systemEvent.emit("coins_changed", this._gameData.coins);
|
|
|
- this.updateUI();
|
|
|
- }
|
|
|
-
|
|
|
- private levelUp(): void {
|
|
|
- this._gameData.level++;
|
|
|
- cc.systemEvent.emit("level_changed", this._gameData.level);
|
|
|
- this.updateUI();
|
|
|
- }
|
|
|
-
|
|
|
- private updateUI(): void {
|
|
|
- if (this.coinsLabel) {
|
|
|
- this.coinsLabel.string = `金币: ${this._gameData.coins}`;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 按钮点击处理
|
|
|
- private onShopButtonClick(): void {
|
|
|
- console.log("商店按钮被点击");
|
|
|
- // 模拟购买逻辑
|
|
|
- if (this._gameData.coins >= 200) {
|
|
|
- this._gameData.coins -= 200;
|
|
|
- this._gameData.hasShopItem = true;
|
|
|
- cc.systemEvent.emit("item_purchased", "power_up");
|
|
|
- cc.systemEvent.emit("coins_changed", this._gameData.coins);
|
|
|
- this.updateUI();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private onUpgradeButtonClick(): void {
|
|
|
- console.log("升级按钮被点击");
|
|
|
- // 模拟升级逻辑
|
|
|
- if (this._gameData.coins >= 100) {
|
|
|
- this._gameData.coins -= 100;
|
|
|
- this.levelUp();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private onSettingsButtonClick(): void {
|
|
|
- console.log("设置按钮被点击");
|
|
|
- // 这里可以打开设置面板
|
|
|
- }
|
|
|
-
|
|
|
- // 动态逻辑执行方法
|
|
|
- public executeShopLogic(): void {
|
|
|
- console.log("执行商店相关逻辑");
|
|
|
- // 可以触发特殊的商店事件或动画
|
|
|
- }
|
|
|
-
|
|
|
- public executeUpgradeLogic(): void {
|
|
|
- console.log("执行升级相关逻辑");
|
|
|
- // 可以显示升级特效或解锁新功能
|
|
|
- }
|
|
|
-
|
|
|
- public executeSettingsLogic(): void {
|
|
|
- console.log("执行设置相关逻辑");
|
|
|
- // 可以显示设置教程或提示
|
|
|
- }
|
|
|
-
|
|
|
- // 事件处理方法
|
|
|
- private onCoinsChanged(coins: number): void {
|
|
|
- console.log(`金币变化: ${coins}`);
|
|
|
- }
|
|
|
-
|
|
|
- private onLevelChanged(level: number): void {
|
|
|
- console.log(`等级变化: ${level}`);
|
|
|
- }
|
|
|
-
|
|
|
- private onItemPurchased(itemId: string): void {
|
|
|
- console.log(`物品购买: ${itemId}`);
|
|
|
- }
|
|
|
-
|
|
|
- private onStepStarted(step: any): void {
|
|
|
- console.log(`引导步骤开始: ${step.stepId}`);
|
|
|
-
|
|
|
- // 可以根据步骤类型播放不同的音效或动画
|
|
|
- this.playStepStartEffect(step.stepId);
|
|
|
- }
|
|
|
-
|
|
|
- private onStepCompleted(step: any): void {
|
|
|
- console.log(`引导步骤完成: ${step.stepId}`);
|
|
|
-
|
|
|
- // 可以给予奖励或播放完成特效
|
|
|
- this.giveStepReward(step.stepId);
|
|
|
- }
|
|
|
-
|
|
|
- private onGuideCompleted(): void {
|
|
|
- console.log("高级引导流程完成!");
|
|
|
-
|
|
|
- this._gameData.tutorialCompleted = true;
|
|
|
-
|
|
|
- // 给予完成奖励
|
|
|
- this.addCoins(500);
|
|
|
-
|
|
|
- // 显示完成庆祝动画
|
|
|
- this.showCompletionCelebration();
|
|
|
- }
|
|
|
-
|
|
|
- private playStepStartEffect(stepId: string): void {
|
|
|
- // 播放步骤开始音效
|
|
|
- console.log(`播放步骤开始特效: ${stepId}`);
|
|
|
- }
|
|
|
-
|
|
|
- private giveStepReward(stepId: string): void {
|
|
|
- // 根据步骤给予不同奖励
|
|
|
- const rewards = {
|
|
|
- "choose_path": 50,
|
|
|
- "shop_buy": 100,
|
|
|
- "upgrade_click": 75,
|
|
|
- "settings_click": 25
|
|
|
- };
|
|
|
-
|
|
|
- const reward = rewards[stepId] || 10;
|
|
|
- this.addCoins(reward);
|
|
|
-
|
|
|
- console.log(`获得步骤奖励: ${reward} 金币`);
|
|
|
- }
|
|
|
-
|
|
|
- private showCompletionCelebration(): void {
|
|
|
- // 创建庆祝动画
|
|
|
- const celebration = new cc.Node("Celebration");
|
|
|
- const label = celebration.addComponent(cc.Label);
|
|
|
- label.string = "🎉 高级引导完成!🎉";
|
|
|
- label.fontSize = 36;
|
|
|
-
|
|
|
- const canvas = cc.find("Canvas");
|
|
|
- if (canvas) {
|
|
|
- canvas.addChild(celebration);
|
|
|
-
|
|
|
- // 庆祝动画
|
|
|
- const tween = cc.tween(celebration)
|
|
|
- .to(0.5, { scale: 1.2 })
|
|
|
- .to(0.5, { scale: 1.0 })
|
|
|
- .delay(2.0)
|
|
|
- .to(0.5, { opacity: 0 })
|
|
|
- .call(() => celebration.removeFromParent());
|
|
|
-
|
|
|
- tween.start();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 调试功能:模拟游戏状态
|
|
|
- */
|
|
|
- public simulateGameState(state: any): void {
|
|
|
- Object.assign(this._gameData, state);
|
|
|
- this.updateUI();
|
|
|
-
|
|
|
- // 触发相应的事件
|
|
|
- cc.systemEvent.emit("coins_changed", this._gameData.coins);
|
|
|
- cc.systemEvent.emit("level_changed", this._gameData.level);
|
|
|
-
|
|
|
- console.log("游戏状态已更新:", this._gameData);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 调试功能:获取详细状态
|
|
|
- */
|
|
|
- public getDetailedStatus(): any {
|
|
|
- const guideManager = this._guideManager;
|
|
|
- const dataManager = guideManager.getDataManager();
|
|
|
-
|
|
|
- return {
|
|
|
- gameData: this._gameData,
|
|
|
- guideStatus: {
|
|
|
- isActive: guideManager.isGuideActive(),
|
|
|
- currentStep: guideManager.getCurrentStep()?.stepId,
|
|
|
- completedSteps: dataManager.getGuideProgress().completedSteps,
|
|
|
- guideIndex: dataManager.getGuideIndex(),
|
|
|
- isCompleted: dataManager.isGuideCompleted()
|
|
|
- },
|
|
|
- registeredSteps: guideManager.getAllSteps().map(step => step.stepId)
|
|
|
- };
|
|
|
- }
|
|
|
-
|
|
|
- onDestroy() {
|
|
|
- // 清理所有事件监听
|
|
|
- cc.systemEvent.off("coins_changed", this.onCoinsChanged, this);
|
|
|
- cc.systemEvent.off("level_changed", this.onLevelChanged, this);
|
|
|
- cc.systemEvent.off("item_purchased", this.onItemPurchased, this);
|
|
|
-
|
|
|
- if (this._guideManager) {
|
|
|
- this._guideManager.off('step_started', this.onStepStarted, this);
|
|
|
- this._guideManager.off('step_completed', this.onStepCompleted, this);
|
|
|
- this._guideManager.off('guide_completed', this.onGuideCompleted, this);
|
|
|
- }
|
|
|
-
|
|
|
- // 清理定时器
|
|
|
- this.unscheduleAllCallbacks();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// 高级调试功能
|
|
|
-if (CC_DEBUG) {
|
|
|
- (window as any).AdvancedGuideDebug = {
|
|
|
- simulateRichPlayer: () => {
|
|
|
- const scene = cc.director.getScene();
|
|
|
- const example = scene.getComponentInChildren(AdvancedExample);
|
|
|
- if (example) {
|
|
|
- example.simulateGameState({
|
|
|
- coins: 2000,
|
|
|
- level: 5,
|
|
|
- hasShopItem: true
|
|
|
- });
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- simulatePoorPlayer: () => {
|
|
|
- const scene = cc.director.getScene();
|
|
|
- const example = scene.getComponentInChildren(AdvancedExample);
|
|
|
- if (example) {
|
|
|
- example.simulateGameState({
|
|
|
- coins: 50,
|
|
|
- level: 1,
|
|
|
- hasShopItem: false
|
|
|
- });
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- getStatus: () => {
|
|
|
- const scene = cc.director.getScene();
|
|
|
- const example = scene.getComponentInChildren(AdvancedExample);
|
|
|
- return example ? example.getDetailedStatus() : null;
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- console.log("高级引导调试功能已启用:");
|
|
|
- console.log("- AdvancedGuideDebug.simulateRichPlayer() - 模拟富有玩家");
|
|
|
- console.log("- AdvancedGuideDebug.simulatePoorPlayer() - 模拟贫穷玩家");
|
|
|
- console.log("- AdvancedGuideDebug.getStatus() - 获取详细状态");
|
|
|
-}
|