Browse Source

升级优化

181404010226 3 months ago
parent
commit
1c262064d6

+ 1 - 0
assets/Scenes/GameLevel.scene

@@ -25253,6 +25253,7 @@
     "upgradeAni": {
       "__id__": 742
     },
+    "weaponUpgradeAni": null,
     "_id": "559UYtr0JMMIDyZSC3724N"
   },
   {

+ 7 - 6
assets/scripts/CombatSystem/EnemyController.ts

@@ -1103,6 +1103,9 @@ export class EnemyController extends BaseSingleton {
         if (gameOver) {
             return;
         }
+
+        // 暂停敌人生成,确保在Toast显示期间不会生成敌人
+        this.pauseSpawning();
         
         // 使用事件机制显示Toast
         const toastText = `第${this.currentWave}波敌人来袭!`;
@@ -1110,13 +1113,11 @@ export class EnemyController extends BaseSingleton {
             message: toastText,
             duration: duration
         });
-
-        // 暂停生成(确保未重复)
-        this.pauseSpawning();
         
+        // 等待Toast消息播放结束后再开始生成敌人
         if (duration > 0) {
             this.scheduleOnce(() => {
-                // 再次通过事件系统检查游戏是否已经结束
+                // 再次检查游戏状态,确保游戏未结束
                 let gameOverCheck = false;
                 EventBus.getInstance().emit(GameEvents.GAME_CHECK_OVER, (isOver: boolean) => {
                     gameOverCheck = isOver;
@@ -1126,11 +1127,11 @@ export class EnemyController extends BaseSingleton {
                     return;
                 }
                 
-                // 真正开始/恢复生成敌人
+                // Toast播放完毕,开始生成敌人
                 this.startGame();
             }, duration);
         } else {
-            // 立即开始游戏
+            // 如果duration为0,立即开始游戏
             this.startGame();
         }
     }

+ 8 - 8
assets/scripts/Core/PhysicsManager.ts

@@ -22,14 +22,14 @@ export class PhysicsManager extends BaseSingleton {
         // 设置物理系统的重力为零(因为是2D平面游戏)
         PhysicsSystem2D.instance.gravity = new Vec2(0, 0);
         
-        // 调试绘制
-        PhysicsSystem2D.instance.debugDrawFlags = this.debugDraw ?
-            (EPhysics2DDrawFlags.Aabb |
-             EPhysics2DDrawFlags.Pair |
-             EPhysics2DDrawFlags.CenterOfMass |
-             EPhysics2DDrawFlags.Joint |
-             EPhysics2DDrawFlags.Shape) :
-            EPhysics2DDrawFlags.None;
+        // // 调试绘制
+        // PhysicsSystem2D.instance.debugDrawFlags = this.debugDraw ?
+        //     (EPhysics2DDrawFlags.Aabb |
+        //      EPhysics2DDrawFlags.Pair |
+        //      EPhysics2DDrawFlags.CenterOfMass |
+        //      EPhysics2DDrawFlags.Joint |
+        //      EPhysics2DDrawFlags.Shape) :
+        //     EPhysics2DDrawFlags.None;
     }
 
     /**

+ 73 - 0
assets/scripts/FourUI/UpgradeSystem/UpgradeAni.ts

@@ -105,5 +105,78 @@ export class UpgradeAni extends Component {
         });
     }
     
+    /**
+     * 显示升级面板动画
+     */
+    public showPanel(): Promise<void> {
+        return new Promise((resolve) => {
+            const panel = this.node;
+            if (!panel) {
+                resolve();
+                return;
+            }
+            
+            // 确保面板激活
+            panel.active = true;
+            
+            // 停止之前的动画
+            Tween.stopAllByTarget(panel);
+            
+            // 设置初始状态:缩放为0
+            panel.setScale(Vec3.ZERO);
+            
+            // 播放弹出动画
+            tween(panel)
+                .to(0.3, { scale: Vec3.ONE }, {
+                    easing: 'backOut'
+                })
+                .call(() => {
+                    resolve();
+                })
+                .start();
+        });
+    }
+    
+    /**
+     * 隐藏升级面板动画
+     */
+    public hidePanel(): Promise<void> {
+        return new Promise((resolve) => {
+            const panel = this.node;
+            if (!panel) {
+                resolve();
+                return;
+            }
+            
+            // 停止之前的动画
+            Tween.stopAllByTarget(panel);
+            
+            // 播放缩小动画
+            tween(panel)
+                .to(0.2, { scale: Vec3.ZERO }, {
+                    easing: 'backIn'
+                })
+                .call(() => {
+                    // 动画结束后隐藏面板
+                    panel.active = false;
+                    resolve();
+                })
+                .start();
+        });
+    }
+    
+    /**
+     * 立即隐藏面板(无动画)
+     */
+    public hidePanelImmediate(): void {
+        const panel = this.node;
+        if (panel) {
+            // 停止所有动画
+            Tween.stopAllByTarget(panel);
+            // 立即隐藏
+            panel.active = false;
+            panel.setScale(Vec3.ONE);
+        }
+    }
 
 }

+ 37 - 9
assets/scripts/FourUI/UpgradeSystem/UpgradeController.ts

@@ -2,6 +2,7 @@ import { _decorator, Component, Node, Button, Label, Sprite, SpriteFrame, Textur
 import { SaveDataManager, WeaponData } from '../../LevelSystem/SaveDataManager';
 import EventBus, { GameEvents } from '../../Core/EventBus';
 import { UpgradeAni } from './UpgradeAni';
+import { PopUPAni } from '../../Animations/PopUPAni';
 
 const { ccclass, property } = _decorator;
 
@@ -21,7 +22,7 @@ interface WeaponConfig {
         bulletSpeed: number;
     };
     visualConfig: {
-        weaponSprites: {
+        weaponSprites: string | {
             "I": string;
             "H-I": string;
             "L": string;
@@ -64,7 +65,8 @@ export class UpgradeController extends Component {
     @property(Prefab) unlockedWeaponPrefab: Prefab = null;  // Unlock.prefab
     
     // 动画控制器
-    @property(UpgradeAni) upgradeAni: UpgradeAni = null;    // Canvas/UpgradeUI/UpgradePanel上的UpgradeAni组件
+    @property(PopUPAni) upgradeAni: PopUPAni = null;    // Canvas/UpgradeUI/UpgradePanel上的PopUPAni组件
+    @property(UpgradeAni) weaponUpgradeAni: UpgradeAni = null;    // 武器升级动画组件
     
     // 数据管理
     private saveDataManager: SaveDataManager = null;
@@ -378,8 +380,21 @@ export class UpgradeController extends Component {
         // 设置武器图标 - 查找专门的武器图标Sprite节点,避免影响背景
         const weaponSprite = spriteNode.getChildByName('WeaponSprite')?.getComponent(Sprite);
         if (weaponSprite && weaponConfig.visualConfig.weaponSprites) {
-            const spritePath = weaponConfig.visualConfig.weaponSprites['I'] || weaponConfig.visualConfig.weaponSprites['H-I'] || weaponConfig.visualConfig.weaponSprites['L'] || weaponConfig.visualConfig.weaponSprites['S'] || weaponConfig.visualConfig.weaponSprites['D-T'];
-            this.loadWeaponSprite(weaponSprite, spritePath);
+            let spritePath: string;
+            // 检查weaponSprites是字符串还是对象
+            if (typeof weaponConfig.visualConfig.weaponSprites === 'string') {
+                spritePath = weaponConfig.visualConfig.weaponSprites;
+            } else {
+                // 如果是对象,按优先级选择路径
+                spritePath = weaponConfig.visualConfig.weaponSprites['I'] || 
+                           weaponConfig.visualConfig.weaponSprites['H-I'] || 
+                           weaponConfig.visualConfig.weaponSprites['L'] || 
+                           weaponConfig.visualConfig.weaponSprites['S'] || 
+                           weaponConfig.visualConfig.weaponSprites['D-T'];
+            }
+            if (spritePath) {
+                this.loadWeaponSprite(weaponSprite, spritePath);
+            }
         }
         
         // 设置武器名称 - Unlock.prefab中的Name节点下的Label(只显示武器名称)
@@ -530,8 +545,21 @@ export class UpgradeController extends Component {
         
         // 设置武器图标 - Canvas/UpgradeUI/UpgradePanel/WeaponSprite
         if (this.panelWeaponSprite && weaponConfig.visualConfig.weaponSprites) {
-            const spritePath = weaponConfig.visualConfig.weaponSprites['I'] || weaponConfig.visualConfig.weaponSprites['H-I'] || weaponConfig.visualConfig.weaponSprites['L'] || weaponConfig.visualConfig.weaponSprites['S'] || weaponConfig.visualConfig.weaponSprites['D-T'];
-            this.loadWeaponSprite(this.panelWeaponSprite, spritePath);
+            let spritePath: string;
+            // 检查weaponSprites是字符串还是对象
+            if (typeof weaponConfig.visualConfig.weaponSprites === 'string') {
+                spritePath = weaponConfig.visualConfig.weaponSprites;
+            } else {
+                // 如果是对象,按优先级选择路径
+                spritePath = weaponConfig.visualConfig.weaponSprites['I'] || 
+                           weaponConfig.visualConfig.weaponSprites['H-I'] || 
+                           weaponConfig.visualConfig.weaponSprites['L'] || 
+                           weaponConfig.visualConfig.weaponSprites['S'] || 
+                           weaponConfig.visualConfig.weaponSprites['D-T'];
+            }
+            if (spritePath) {
+                this.loadWeaponSprite(this.panelWeaponSprite, spritePath);
+            }
         }
         
         // 设置武器名称和等级 - Canvas/UpgradeUI/UpgradePanel/LevelLabel
@@ -740,8 +768,8 @@ export class UpgradeController extends Component {
      * 播放武器升级成功动画
      */
     private async playWeaponUpgradeSuccessAnimation(): Promise<void> {
-        if (!this.upgradeAni || !this.panelWeaponSprite) {
-            console.warn('[UpgradeController] upgradeAni 或 panelWeaponSprite 未设置,跳过升级动画');
+        if (!this.weaponUpgradeAni || !this.panelWeaponSprite) {
+            console.warn('[UpgradeController] weaponUpgradeAni 或 panelWeaponSprite 未设置,跳过升级动画');
             return;
         }
         
@@ -750,7 +778,7 @@ export class UpgradeController extends Component {
             const weaponIconNode = this.panelWeaponSprite.node;
             
             // 播放升级动画
-            await this.upgradeAni.playWeaponUpgradeAnimation(weaponIconNode);
+            await this.weaponUpgradeAni.playWeaponUpgradeAnimation(weaponIconNode);
             
             console.log('[UpgradeController] 武器升级动画播放完成');
         } catch (error) {