|
|
@@ -68,8 +68,8 @@ export class LaunchScreen extends Component {
|
|
|
// 更新进度显示
|
|
|
this.updateProgress(0, '正在加载游戏资源...');
|
|
|
|
|
|
- // 预加载game-level分包
|
|
|
- await this.loadSubpackage('game-level');
|
|
|
+ // 直接预加载GameLevel场景(不使用分包)
|
|
|
+ await this.preloadGameLevelScene();
|
|
|
|
|
|
// 预加载完成,跳转到游戏场景
|
|
|
this.loadGameScene();
|
|
|
@@ -81,69 +81,23 @@ export class LaunchScreen extends Component {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 加载分包
|
|
|
+ * 直接预加载GameLevel场景
|
|
|
*/
|
|
|
- private loadSubpackage(bundleName: string): Promise<void> {
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
- console.log(`[LaunchScreen] 开始加载分包: ${bundleName}`);
|
|
|
+ private preloadGameLevelScene(): Promise<void> {
|
|
|
+ return new Promise<void>((resolve, reject) => {
|
|
|
+ console.log('[LaunchScreen] 开始预加载GameLevel场景');
|
|
|
|
|
|
- // 检查是否在微信小游戏环境
|
|
|
- if (typeof wx !== 'undefined' && wx && wx.loadSubpackage) {
|
|
|
- // 微信小游戏分包加载
|
|
|
- const loadTask = wx.loadSubpackage({
|
|
|
- name: bundleName,
|
|
|
- success: () => {
|
|
|
- console.log(`[LaunchScreen] 微信分包 ${bundleName} 加载成功`);
|
|
|
- // 分包加载成功后,再加载bundle
|
|
|
- this.loadBundleAfterSubpackage(bundleName, resolve, reject);
|
|
|
- },
|
|
|
- fail: (err) => {
|
|
|
- console.error(`[LaunchScreen] 微信分包 ${bundleName} 加载失败:`, err);
|
|
|
- // 微信分包加载失败时,尝试直接加载bundle作为降级方案
|
|
|
- console.log(`[LaunchScreen] 尝试直接加载bundle作为降级方案`);
|
|
|
- this.loadBundleAfterSubpackage(bundleName, resolve, reject);
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- // 监听分包加载进度
|
|
|
- if (loadTask && loadTask.onProgressUpdate) {
|
|
|
- loadTask.onProgressUpdate((res) => {
|
|
|
- const progress = res.progress || 0;
|
|
|
- this.updateProgress(progress, `正在下载分包... ${progress}%`);
|
|
|
- });
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 非微信环境,直接加载bundle
|
|
|
- console.log(`[LaunchScreen] 非微信环境,直接加载bundle`);
|
|
|
- this.loadBundleAfterSubpackage(bundleName, resolve, reject);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 分包下载完成后加载bundle
|
|
|
- */
|
|
|
- private loadBundleAfterSubpackage(bundleName: string, resolve: Function, reject: Function) {
|
|
|
- assetManager.loadBundle(bundleName, (err, bundle) => {
|
|
|
- if (err) {
|
|
|
- console.error(`[LaunchScreen] Bundle ${bundleName} 加载失败:`, err);
|
|
|
- // 如果bundle加载失败,尝试跳过分包直接进入主场景
|
|
|
- console.log(`[LaunchScreen] Bundle加载失败,尝试跳过分包加载`);
|
|
|
- this.skipSubpackageAndLoadMainScene(resolve, reject);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- console.log(`[LaunchScreen] Bundle ${bundleName} 加载成功`);
|
|
|
-
|
|
|
- // 预加载分包中的场景
|
|
|
- bundle.preloadScene('GameLevel', (finished: number, total: number) => {
|
|
|
+ // 直接预加载场景
|
|
|
+ director.preloadScene('GameLevel', (finished: number, total: number) => {
|
|
|
const progress = finished / total;
|
|
|
this.updateProgress(progress * 100, `正在加载游戏场景... ${Math.floor(progress * 100)}%`);
|
|
|
}, (err) => {
|
|
|
if (err) {
|
|
|
console.error('[LaunchScreen] GameLevel场景预加载失败:', err);
|
|
|
- // 场景预加载失败时,也尝试跳过分包
|
|
|
- this.skipSubpackageAndLoadMainScene(resolve, reject);
|
|
|
+ // 预加载失败时,仍然尝试直接跳转(可能场景存在但预加载失败)
|
|
|
+ console.log('[LaunchScreen] 预加载失败,但仍将尝试直接加载场景');
|
|
|
+ this.updateProgress(100, '准备进入游戏...');
|
|
|
+ resolve();
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -169,26 +123,6 @@ export class LaunchScreen extends Component {
|
|
|
console.log(`[LaunchScreen] ${message} (${progress.toFixed(1)}%)`);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 跳过分包加载,直接进入主场景的降级方案
|
|
|
- */
|
|
|
- private skipSubpackageAndLoadMainScene(resolve: Function, reject: Function) {
|
|
|
- console.log('[LaunchScreen] 执行降级方案:跳过分包,尝试加载主场景');
|
|
|
-
|
|
|
- // 尝试加载主场景(如果存在的话)
|
|
|
- director.loadScene('First', (err) => {
|
|
|
- if (err) {
|
|
|
- console.error('[LaunchScreen] 主场景加载也失败:', err);
|
|
|
- this.updateProgress(0, '游戏加载失败,请刷新重试');
|
|
|
- reject(err);
|
|
|
- } else {
|
|
|
- console.log('[LaunchScreen] 成功加载主场景作为降级方案');
|
|
|
- this.updateProgress(100, '加载完成(降级模式)');
|
|
|
- resolve();
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 跳转到游戏场景
|
|
|
*/
|
|
|
@@ -197,39 +131,22 @@ export class LaunchScreen extends Component {
|
|
|
|
|
|
// 延迟一秒后跳转,让用户看到加载完成的提示
|
|
|
this.scheduleOnce(() => {
|
|
|
- // 使用分包中的场景
|
|
|
- const bundle = assetManager.getBundle('game-level');
|
|
|
- if (bundle) {
|
|
|
- bundle.loadScene('GameLevel', (err, scene) => {
|
|
|
- if (err) {
|
|
|
- console.error('[LaunchScreen] GameLevel场景加载失败:', err);
|
|
|
- // 如果分包场景加载失败,尝试加载主场景
|
|
|
- this.loadFallbackScene();
|
|
|
- return;
|
|
|
- }
|
|
|
+ // 直接加载GameLevel场景
|
|
|
+ director.loadScene('GameLevel', (err) => {
|
|
|
+ if (err) {
|
|
|
+ console.error('[LaunchScreen] GameLevel场景加载失败:', err);
|
|
|
+ console.log('[LaunchScreen] 尝试降级方案:停留在启动页面');
|
|
|
+ this.updateProgress(0, 'GameLevel场景不存在,请检查场景配置');
|
|
|
|
|
|
- console.log('[LaunchScreen] 正在切换到GameLevel场景');
|
|
|
- director.runScene(scene);
|
|
|
- });
|
|
|
- } else {
|
|
|
- console.error('[LaunchScreen] game-level分包未找到,尝试加载主场景');
|
|
|
- this.loadFallbackScene();
|
|
|
- }
|
|
|
+ // 提供重试按钮或其他交互方式
|
|
|
+ this.scheduleOnce(() => {
|
|
|
+ this.updateProgress(0, '点击屏幕重试或检查场景配置');
|
|
|
+ }, 2.0);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log('[LaunchScreen] 成功切换到GameLevel场景');
|
|
|
+ });
|
|
|
}, 1.0);
|
|
|
}
|
|
|
-
|
|
|
- /**
|
|
|
- * 加载降级场景
|
|
|
- */
|
|
|
- private loadFallbackScene() {
|
|
|
- console.log('[LaunchScreen] 尝试加载降级场景');
|
|
|
- director.loadScene('First', (err) => {
|
|
|
- if (err) {
|
|
|
- console.error('[LaunchScreen] 降级场景加载失败:', err);
|
|
|
- this.updateProgress(0, '游戏启动失败,请刷新页面重试');
|
|
|
- } else {
|
|
|
- console.log('[LaunchScreen] 成功加载降级场景');
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
}
|