import { ResMgr } from "./ResMgr"; import { ResPath } from "./ResConfig"; import { Prefab, SpriteFrame, AudioClip, instantiate, Node } from 'cc'; /** * ResMgr 资源管理器使用示例 */ // ========== 示例1: 加载单个资源 ========== /** * 加载UI预制体 */ export async function loadUIPrefab(): Promise { try { console.log("========== 加载UI预制体 =========="); // 加载预制体 const prefab = await ResMgr.getInstance().load( 'resources', 'prefabs/ui/LoginUI', Prefab ); console.log("预制体加载成功:", prefab.name); // 实例化预制体 const node = instantiate(prefab); console.log("预制体实例化成功"); } catch (error) { console.error("加载UI预制体失败:", error); } } /** * 加载图片资源 */ export async function loadSprite(): Promise { try { console.log("========== 加载图片资源 =========="); // 加载精灵帧 const spriteFrame = await ResMgr.getInstance().load( 'resources', 'textures/ui/icon_player', SpriteFrame ); console.log("图片加载成功:", spriteFrame.name); } catch (error) { console.error("加载图片失败:", error); } } /** * 加载音频资源 */ export async function loadAudio(): Promise { try { console.log("========== 加载音频资源 =========="); // 加载音频片段 const audioClip = await ResMgr.getInstance().load( 'resources', 'audio/music/bg_music', AudioClip ); console.log("音频加载成功:", audioClip.name); } catch (error) { console.error("加载音频失败:", error); } } // ========== 示例2: 预加载资源 ========== /** * 预加载关卡资源 */ export async function preloadLevel(): Promise { try { console.log("========== 预加载关卡资源 =========="); // 预加载多个资源 const resources = [ 'prefabs/enemy/Enemy1', 'prefabs/enemy/Enemy2', 'prefabs/effect/Explosion' ]; for (const path of resources) { await ResMgr.getInstance().preload( 'resources', path, Prefab, (finished, total) => { const progress = (finished / total * 100).toFixed(0); console.log(`预加载 ${path}: ${progress}%`); } ); } console.log("关卡资源预加载完成"); } catch (error) { console.error("预加载失败:", error); } } // ========== 示例3: 加载目录 ========== /** * 加载所有UI图标 */ export async function loadAllUIIcons(): Promise { try { console.log("========== 加载UI图标目录 =========="); // 加载整个目录 const sprites = await ResMgr.getInstance().loadDir( 'resources', ResPath.UI_TEXTURE + '/icons', SpriteFrame ); console.log(`加载了 ${sprites.length} 个UI图标`); // 遍历所有图标 sprites.forEach((sprite, index) => { console.log(`图标 ${index + 1}: ${sprite.name}`); }); } catch (error) { console.error("加载目录失败:", error); } } // ========== 示例4: 资源释放 ========== /** * 释放不需要的资源 */ export function releaseUnusedResources(): void { console.log("========== 释放资源 =========="); // 释放单个资源 ResMgr.getInstance().release('resources', 'prefabs/ui/LoginUI'); // 释放目录资源 ResMgr.getInstance().releaseDir('resources', 'textures/ui/icons'); console.log("资源释放完成"); } // ========== 示例5: 完整的资源管理流程 ========== /** * 游戏场景资源管理示例 */ export class GameSceneResourceManager { private loadedPrefabs: Map = new Map(); /** * 进入场景 - 加载场景资源 */ async onEnterScene(): Promise { console.log("========== 进入游戏场景 =========="); try { // 1. 预加载场景资源 await this.preloadSceneResources(); // 2. 加载玩家预制体 const playerPrefab = await ResMgr.getInstance().load( 'resources', 'prefabs/actor/Player', Prefab ); this.loadedPrefabs.set('Player', playerPrefab); // 3. 加载敌人预制体 const enemies = await ResMgr.getInstance().loadDir( 'resources', 'prefabs/enemy', Prefab ); enemies.forEach(prefab => { this.loadedPrefabs.set(prefab.name, prefab); }); console.log("场景资源加载完成"); } catch (error) { console.error("场景资源加载失败:", error); } } /** * 预加载场景资源 */ private async preloadSceneResources(): Promise { // 预加载特效预制体 const effectResources = [ 'prefabs/effect/Hit', 'prefabs/effect/Explosion' ]; for (const path of effectResources) { await ResMgr.getInstance().preload( 'resources', path, Prefab ); } // 预加载音频 const audioResources = [ 'audio/effect/hit', 'audio/effect/explosion' ]; for (const path of audioResources) { await ResMgr.getInstance().preload( 'resources', path, AudioClip ); } } /** * 获取已加载的预制体 */ getPrefab(name: string): Prefab | undefined { return this.loadedPrefabs.get(name); } /** * 离开场景 - 释放场景资源 */ onLeaveScene(): void { console.log("========== 离开游戏场景 =========="); // 清空预制体缓存 this.loadedPrefabs.clear(); // 释放场景相关资源 ResMgr.getInstance().releaseDir('resources', 'prefabs/actor'); ResMgr.getInstance().releaseDir('resources', 'prefabs/enemy'); ResMgr.getInstance().releaseDir('resources', 'prefabs/effect'); console.log("场景资源释放完成"); console.log(`缓存大小: ${ResMgr.getInstance().getCacheSize()}`); } } // ========== 测试函数 ========== /** * 测试资源管理器 */ export async function testResMgr(): Promise { console.log("========================================"); console.log(" 开始测试 ResMgr 资源管理器"); console.log("========================================"); // 测试1: 加载单个资源 await loadUIPrefab(); await loadSprite(); // 测试2: 预加载资源 await preloadLevel(); // 测试3: 加载目录 await loadAllUIIcons(); // 查看缓存大小 console.log(`当前缓存资源数量: ${ResMgr.getInstance().getCacheSize()}`); // 测试4: 释放资源 releaseUnusedResources(); console.log(`释放后缓存资源数量: ${ResMgr.getInstance().getCacheSize()}`); console.log("========================================"); console.log(" ResMgr 测试完成"); console.log("========================================"); }