2_menus.h

本文介绍了一个简单的Windows应用程序中菜单项ID的定义及窗口过程函数和关于对话框过程函数的声明。通过宏定义设置了不同的菜单命令ID,并声明了处理消息的回调函数WndProc以及关于对话框的回调函数About。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> #define IDM_EXIT           100
#define IDM_OLD            200
#define IDM_NEW            201
#define IDM_ABOUT          301

LRESULT CALLBACK WndProc  (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About    (HWND, UINT, WPARAM, LPARAM);

把一下PyQt5的代码变成PyQt6的代码 代码: from PyQt5.QtCore import QUrl, Qt, QTranslator, QLocale, QLibraryInfo from PyQt5.QtGui import QFont, QIcon, QKeySequence from PyQt5.QtWidgets import (QApplication, QMainWindow, QToolBar, QLineEdit, QAction, QStatusBar, QMessageBox, QTabWidget) from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage, QWebEngineSettings from datetime import datetime import sys,os os.environ["QT_MULTIMEDIA_PREFERRED_PLUGINS"] = "windowsmediafoundation" os.environ["QTWEBENGINE_CHROMIUM_FLAGS"] = "--enable-gpu-rasterization --enable-zero-copy" os.environ["QT_MEDIA_BACKEND"] = "ffmpeg" class CustomWebView(QWebEngineView): def __init__(self, parent=None,window=None): super().__init__(parent) # 捕获链接悬停事件获取URL self.window = window self.page().linkHovered.connect(self.save_hovered_url) self.hovered_url = QUrl() self.page().profile().setHttpUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36") settings = self.settings() settings.setAttribute(QWebEngineSettings.PlaybackRequiresUserGesture, False) # 允许自动播放 settings.setAttribute(QWebEngineSettings.JavascriptEnabled, True) settings.setAttribute(QWebEngineSettings.PluginsEnabled, True) # 启用插件 settings.setAttribute(QWebEngineSettings.WebGLEnabled, True) # 支持WebGL settings.setAttribute(QWebEngineSettings.LocalStorageEnabled, True) # 启用本地存储 settings.setAttribute(QWebEngineSettings.JavascriptCanOpenWindows, True) def save_hovered_url(self, url): """保存鼠标悬停的链接地址""" self.hovered_url = QUrl(url) def createWindow(self, type): """重写窗口创建方法""" url = QUrl(self.url().toString()) if self.hovered_url.isValid(): try: self.window.add_new_tab(self.hovered_url) self.load(url) except: self.load(self.hovered_url) return self # 返回当前视图实例 def save_screenshot(self): current_time = datetime.now() photo_name = current_time.strftime("%Y%m%d_%H%M%S_%f") + '.png' save_folder = r'save\photo' os.makedirs(save_folder, exist_ok=True) save_path = os.path.join(save_folder, photo_name) photo = self.grab() photo.save(rf'save\photo\{photo_name}') class BrowserWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("PyQt5 浏览器") self.setGeometry(100, 100, 1200, 800) # 创建标签页 self.tabs = QTabWidget() self.tabs.setTabsClosable(True) self.tabs.tabCloseRequested.connect(self.close_tab) self.setCentralWidget(self.tabs) # 创建初始标签页 self.add_new_tab(QUrl('https://www.baidu.com'), "主页") # 创建工具栏 self.create_toolbar() # 创建菜单栏 self.create_menus() # 创建状态栏 self.status_bar = QStatusBar() self.setStatusBar(self.status_bar) # 显示窗口 self.show() def add_new_tab(self, url=None, label="新标签页"): """添加新标签页""" if url is None: url = QUrl('https://www.baidu.com') browser = CustomWebView(window=self) settings = browser.settings() settings.setFontFamily(QWebEngineSettings.StandardFont, 'Microsoft YaHei UI') settings.setFontFamily(QWebEngineSettings.FixedFont, "Courier New") browser.setUrl(url) browser.urlChanged.connect(self.update_urlbar) browser.loadProgress.connect(self.update_progress) browser.loadFinished.connect(self.update_title) index = self.tabs.addTab(browser, label) self.tabs.setCurrentIndex(index) return browser def close_tab(self, index): """关闭标签页""" if self.tabs.count() < 2: return self.tabs.removeTab(index) def create_toolbar(self): """创建工具栏""" toolbar = QToolBar("导航工具栏") toolbar.setMovable(False) self.addToolBar(toolbar) # 后退按钮 back_btn = QAction(QIcon("back.png"), "后退", self) back_btn.setStatusTip("后退到上一页") back_btn.triggered.connect(lambda: self.current_browser().back()) toolbar.addAction(back_btn) # 前进按钮 forward_btn = QAction(QIcon("forward.png"), "前进", self) forward_btn.setStatusTip("前进到下一页") forward_btn.triggered.connect(lambda: self.current_browser().forward()) toolbar.addAction(forward_btn) # 刷新按钮 reload_btn = QAction(QIcon("reload.png"), "刷新", self) reload_btn.setStatusTip("刷新当前页面") reload_btn.triggered.connect(lambda: self.current_browser().reload()) toolbar.addAction(reload_btn) # 主页按钮 home_btn = QAction(QIcon("home.png"), "主页", self) home_btn.setStatusTip("返回主页") home_btn.triggered.connect(self.navigate_home) toolbar.addAction(home_btn) toolbar.addSeparator() # 地址栏 self.urlbar = QLineEdit() self.urlbar.returnPressed.connect(self.navigate_to_url) toolbar.addWidget(self.urlbar) # 停止加载按钮 stop_btn = QAction(QIcon("stop.png"), "停止", self) stop_btn.setStatusTip("停止加载当前页面") stop_btn.triggered.connect(lambda: self.current_browser().stop()) toolbar.addAction(stop_btn) def create_menus(self): """创建菜单栏""" # 文件菜单 file_menu = self.menuBar().addMenu("文件(&F)") new_tab_action = QAction(QIcon("new-tab.png"), "新建标签页", self) new_tab_action.setShortcut(QKeySequence.AddTab) new_tab_action.triggered.connect(lambda: self.add_new_tab()) file_menu.addAction(new_tab_action) new_window_action = QAction(QIcon("new-window.png"), "新建窗口", self) new_window_action.setShortcut("Ctrl+N") new_window_action.triggered.connect(self.new_window) file_menu.addAction(new_window_action) file_menu.addSeparator() save_page_action = QAction(QIcon("save.png"), "保存页面", self) save_page_action.setShortcut("Ctrl+S") save_page_action.triggered.connect(self.save_page) file_menu.addAction(save_page_action) file_menu.addSeparator() exit_action = QAction(QIcon("exit.png"), "退出", self) exit_action.setShortcut("Ctrl+Q") exit_action.triggered.connect(self.close) file_menu.addAction(exit_action) # 编辑菜单 edit_menu = self.menuBar().addMenu("编辑(&E)") copy_action = QAction(QIcon("copy.png"), "复制", self) copy_action.setShortcut("Ctrl+C") copy_action.triggered.connect(self.copy) edit_menu.addAction(copy_action) paste_action = QAction(QIcon("paste.png"), "粘贴", self) paste_action.setShortcut("Ctrl+V") paste_action.triggered.connect(self.paste) edit_menu.addAction(paste_action) cut_action = QAction(QIcon("cut.png"), "剪切", self) cut_action.setShortcut("Ctrl+X") cut_action.triggered.connect(self.cut) edit_menu.addAction(cut_action) # 查看菜单 view_menu = self.menuBar().addMenu("查看(&V)") zoom_in_action = QAction(QIcon("zoom-in.png"), "放大", self) zoom_in_action.setShortcut("Ctrl++") zoom_in_action.triggered.connect(self.zoom_in) view_menu.addAction(zoom_in_action) zoom_out_action = QAction(QIcon("zoom-out.png"), "缩小", self) zoom_out_action.setShortcut("Ctrl+-") zoom_out_action.triggered.connect(self.zoom_out) view_menu.addAction(zoom_out_action) reset_zoom_action = QAction(QIcon("zoom-reset.png"), "重置缩放", self) reset_zoom_action.setShortcut("Ctrl+0") reset_zoom_action.triggered.connect(self.reset_zoom) view_menu.addAction(reset_zoom_action) # 历史菜单 history_menu = self.menuBar().addMenu("历史(&H)") back_action = QAction(QIcon("back.png"), "后退", self) back_action.setShortcut("Alt+Left") back_action.triggered.connect(lambda: self.current_browser().back()) history_menu.addAction(back_action) forward_action = QAction(QIcon("forward.png"), "前进", self) forward_action.setShortcut("Alt+Right") forward_action.triggered.connect(lambda: self.current_browser().forward()) history_menu.addAction(forward_action) # 帮助菜单 help_menu = self.menuBar().addMenu("帮助(&H)") about_action = QAction(QIcon("about.png"), "关于", self) about_action.triggered.connect(self.show_about) help_menu.addAction(about_action) def current_browser(self): """获取当前标签页的浏览器实例""" return self.tabs.currentWidget() def navigate_home(self): """导航到主页""" self.current_browser().setUrl(QUrl("https://www.baidu.com")) def navigate_to_url(self): """导航到地址栏中的URL""" url = self.urlbar.text() if not url.startswith(('http://', 'https://')): url = 'http://' + url self.current_browser().setUrl(QUrl(url)) def update_urlbar(self, q): """更新地址栏显示""" self.urlbar.setText(q.toString()) self.urlbar.setCursorPosition(0) def update_progress(self, progress): """更新加载进度""" if progress < 100: self.status_bar.showMessage(f"加载中: {progress}%") else: self.status_bar.clearMessage() def update_title(self): """更新标签页标题""" title = self.current_browser().page().title() self.setWindowTitle(f"{title} - PyQt5 浏览器") self.tabs.setTabText(self.tabs.currentIndex(), title[:15] + '...' if len(title) > 15 else title) def new_window(self): """创建新窗口""" new_window = BrowserWindow() new_window.show() def save_page(self): """保存页面""" self.current_browser().save_screenshot() self.status_bar.showMessage("保存成功", 3000) def copy(self): """复制操作""" self.current_browser().page().triggerAction(QWebEnginePage.Copy) def paste(self): """粘贴操作""" self.current_browser().page().triggerAction(QWebEnginePage.Paste) def cut(self): """剪切操作""" self.current_browser().page().triggerAction(QWebEnginePage.Cut) def zoom_in(self): """放大页面""" self.current_browser().setZoomFactor(self.current_browser().zoomFactor() + 0.1) def zoom_out(self): """缩小页面""" self.current_browser().setZoomFactor(self.current_browser().zoomFactor() - 0.1) def reset_zoom(self): """重置缩放""" self.current_browser().setZoomFactor(1.0) def show_about(self): """显示关于对话框""" QMessageBox.about(self, "关于 PyQt5 浏览器", "这是一个使用 PyQt5 创建的浏览器\n\n" "版本: 1.0\n" "支持基本浏览功能、多标签页和菜单栏操作") if __name__ == "__main__": app = QApplication(sys.argv) app.setApplicationName("PyQt5 浏览器") app.setWindowIcon(QIcon("browser.png")) app.setFont(QFont('Microsoft YaHei UI', 10, QFont.Normal)) translator = QTranslator() locale = QLocale.system().name() if translator.load("qt_"+ locale, QLibraryInfo.location(QLibraryInfo.TranslationsPath)): app.installTranslator(translator) # 设置默认样式 app.setStyle("Fusion") window = BrowserWindow() sys.exit(app.exec_())
07-16
// ====== 环境修复代码(确保全局对象安全) ====== (function() { if (cc && cc.sys && cc.sys.isNative) { try { console.log('[EnvFix] Applying environment patches for', cc.sys.os); // 可靠获取全局对象的多平台兼容方案 const getGlobalObject = () => { // 优先级1: Cocos Creator 的全局对象 if (typeof cc !== 'undefined' && cc.game && cc.game.globalObject) { return cc.game.globalObject; } // 优先级2: Node.js 环境 if (typeof global !== 'undefined') return global; // 优先级3: 浏览器环境 if (typeof window !== 'undefined') return window; // 优先级4: Web Worker 环境 if (typeof self !== 'undefined') return self; // 终极回退方案 return Function('return this')() || {}; }; const globalObj = getGlobalObject(); // 修复关键全局变量缺失问题 if (typeof global === 'undefined') global = globalObj; if (typeof self === 'undefined') self = globalObj; if (typeof globalThis === 'undefined') globalThis = globalObj; // 确保全局对象上有 self 属性 if (globalObj && typeof globalObj.self === 'undefined') { Object.defineProperty(globalObj, 'self', { value: globalObj, writable: false, configurable: false, enumerable: false }); console.log('[EnvFix] Added self to global object'); } // 验证修复结果 console.log('[EnvFix] Verification:', { global: typeof global, self: typeof self, globalThis: typeof globalThis, equality: self === global && global === globalThis }); } catch (e) { console.error('[EnvFix] Failed:', e); } } else { console.log('[EnvFix] Skipping for non-native platform'); } })(); // ====== 改进的引擎初始化保护系统 ====== const EngineReady = (function() { let _promise = null; let _resolve = null; let _isReady = false; let _checkInterval = null; return { get isReady() { return _isReady; }, get promise() { return _promise; }, init() { if (!_promise) { _promise = new Promise(resolve => { _resolve = () => { _isReady = true; resolve(); if (_checkInterval) { clearInterval(_checkInterval); _checkInterval = null; } }; // 安全检查:确保cc.game存在 const safeCheckEngine = () => { // 如果引擎已经初始化 if (cc && cc.game && cc.game._isEngineInited) { _resolve(); return true; } // 尝试监听引擎初始化事件 if (cc && cc.game && cc.game.once) { // 使用更安全的方式访问事件常量 const eventName = (cc.game && cc.game.EVENT_ENGINE_INITED) || (cc.Game && cc.Game.EVENT_ENGINE_INITED) || 'engine-inited'; cc.game.once(eventName, _resolve); return true; } return false; }; // 首次尝试检查 if (safeCheckEngine()) { return; } // 如果首次检查失败,设置轮询检查 _checkInterval = setInterval(() => { if (safeCheckEngine()) { clearInterval(_checkInterval); _checkInterval = null; } }, 100); }); } return _promise; }, // 安全访问引擎API的包装器 safeAccess(callback) { if (_isReady) { try { return callback(); } catch (e) { console.error('[EngineSafe] Callback error:', e); } } return _promise.then(callback).catch(e => { console.error('[EngineSafe] Async callback error:', e); }); } }; })(); // 初始化但不立即等待 EngineReady.init(); // ====== 游戏主入口 ====== async function gameMainEntry() { try { console.log('[Main] Waiting for engine initialization...'); // 安全等待引擎初始化 await EngineReady.promise; console.log('[Main] Engine fully initialized'); // 安全初始化游戏设置 EngineReady.safeAccess(() => { if (cc.view) { cc.view.enableRetina(true); cc.view.resizeWithBrowserSize(true); cc.view.setDesignResolutionSize(960, 640, cc.ResolutionPolicy.SHOW_ALL); } }); // 加载重力引擎SDK await loadGravityEngineSDK(); // 加载启动场景 await loadStartScene(); } catch (error) { console.error('[Main] Game initialization failed:', error); // 尝试恢复基本功能 try { // 直接尝试加载场景 if (cc.director && cc.director.loadScene) { cc.director.loadScene('start'); } } catch (fallbackError) { console.error('[Main] Fallback scene load failed:', fallbackError); // 最终后备方案 displayErrorFallback('Initialization Failed\nPlease Restart'); } } } // 错误显示后备方案 function displayErrorFallback(message) { try { // 尝试使用DOM创建错误显示 const errorDiv = document.createElement('div'); errorDiv.style.position = 'fixed'; errorDiv.style.top = '0'; errorDiv.style.left = '0'; errorDiv.style.width = '100%'; errorDiv.style.height = '100%'; errorDiv.style.backgroundColor = 'black'; errorDiv.style.color = 'white'; errorDiv.style.display = 'flex'; errorDiv.style.justifyContent = 'center'; errorDiv.style.alignItems = 'center'; errorDiv.style.zIndex = '9999'; errorDiv.style.fontFamily = 'Arial, sans-serif'; errorDiv.style.fontSize = '24px'; errorDiv.style.textAlign = 'center'; errorDiv.style.whiteSpace = 'pre-line'; errorDiv.textContent = message; document.body.appendChild(errorDiv); } catch (domError) { console.error('[Fallback] Failed to create error display:', domError); } } // ====== SDK 加载器 ====== async function loadGravityEngineSDK() { const sdkPaths = [ 'src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.js', 'assets/_plugs/lib/gravityengine.mg.cocoscreator.min.js', 'lib/gravityengine.mg.cocoscreator.min.js' // 额外后备路径 ]; let sdkLoaded = false; for (const path of sdkPaths) { try { console.log(`[SDK] Attempting to load from: ${path}`); await new Promise((resolve, reject) => { if (cc && cc.assetManager && cc.assetManager.loadScript) { cc.assetManager.loadScript(path, (err) => { if (err) { console.warn(`[SDK] Load failed: ${err.message}`); reject(err); } else { resolve(); } }); } else { console.warn('[SDK] cc.assetManager not available'); reject('Asset manager not available'); } }); console.log('[SDK] GravityEngine loaded successfully'); sdkLoaded = true; initGravityEngine(); break; } catch (err) { // 继续尝试下一个路径 } } if (!sdkLoaded) { console.error('[SDK] All load attempts failed'); handleSDKLoadFailure(); } } function initGravityEngine() { if (typeof GravityEngine === 'undefined') { console.error('[SDK] GravityEngine not defined after loading'); return; } try { GravityEngine.init({ appId: 'YOUR_APP_ID', // 替换为实际AppID enableLog: true }); console.log('[SDK] GravityEngine initialized'); } catch (e) { console.error('[SDK] Initialization failed:', e); } } function handleSDKLoadFailure() { console.warn('[SDK] Disabling analytics features'); // 创建空函数降级 window.trackEvent = window.trackEvent || function() {}; window.GravityEngine = window.GravityEngine || { init: () => console.warn('SDK not available'), trackEvent: () => {} }; } // ====== 场景加载器 ====== async function loadStartScene() { try { // 尝试加载主资源包 await new Promise((resolve, reject) => { if (cc && cc.assetManager && cc.assetManager.loadBundle) { cc.assetManager.loadBundle('main', (err) => { if (err) { console.error('[Scene] Bundle load failed:', err); reject(err); } else { console.log('[Scene] Main bundle loaded'); resolve(); } }); } else { console.warn('[Scene] Asset manager not available, skipping bundle load'); resolve(); // 继续执行 } }); // 加载启动场景 if (cc.director && cc.director.loadScene) { cc.director.loadScene('start'); } else { throw new Error('Director not available'); } } catch (error) { console.error('[Scene] Failed to load main bundle:', error); // 后备方案:直接加载场景 try { console.log('[Scene] Trying direct scene load'); if (cc.director && cc.director.loadScene) { cc.director.loadScene('start'); } else { throw new Error('Director not available'); } } catch (directError) { console.error('[Scene] Direct scene load failed:', directError); throw directError; // 传递给上层处理 } } } // ====== UI_Entry 组件 ====== var _decorator = cc._decorator; var _ccclass = _decorator.ccclass; var _property = _decorator.property; // 导入依赖模块 const r_Const_Common = require("Const_Common"); const r_GravityPlatform = require("GravityPlatform"); const r_YpNetMag = require("YpNetMag"); const r_EvenType = require("EvenType"); const r_PlayerDataManager = require("PlayerDataManager"); const r_ExcelLoader = require("ExcelLoader"); const r_GameDataManager = require("GameDataManager"); const r_GameGlobalVariable = require("GameGlobalVariable"); const r_UIConfig_Game = require("UIConfig_Game"); const r_UIConfig_Home = require("UIConfig_Home"); const r_BundleConfig = require("BundleConfig"); const r_GameConfig = require("GameConfig"); const r_AudioManager = require("AudioManager"); const r_EventManager = require("EventManager"); const r_HttpManager = require("HttpManager"); const r_LogManager = require("LogManager"); const r_ResLoader = require("ResLoader"); const r_UIManager = require("UIManager"); const r_UIView = require("UIView"); var def_UI_Entry = (function (_super) { __extends(def_UI_Entry, _super); function def_UI_Entry() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.progress_loading = null; _this.loginTimeoutHandler = null; return _this; } // 组件生命周期:加载 def_UI_Entry.prototype.onLoad = function () { var _this = this; EngineReady.safeAccess(function () { try { if (cc.director && cc.director.getCollisionManager) { cc.director.getCollisionManager().enabled = true; } console.log('[UI] Collision manager enabled'); _this._show(); } catch (e) { console.error('[UI] onLoad error:', e); _this.startLoadGame(); // 直接开始加载游戏 } }).catch(function (err) { console.error('[UI] Engine access error:', err); _this.startLoadGame(); }); }; // 组件生命周期:销毁 def_UI_Entry.prototype.onDestroy = function () { if (this.loginTimeoutHandler) { cc.Tween.stop(this.loginTimeoutHandler); this.loginTimeoutHandler = null; console.log('[UI] Login timeout handler cleared'); } }; // 显示UI并初始化平台SDK def_UI_Entry.prototype._show = function () { return __awaiter(this, void 0, void 0, function () { var _this = this; return __generator(this, function (_a) { this.progress_loading.progress = 0; console.log('[UI] Showing UI_Entry'); // 平台特定的SDK初始化 if (cc.sys && cc.sys.isBrowser) { this.initYPSDK().catch(function (err) { console.error('[UI] YPSDK init failed:', err); _this.startLoadGame(); }); } else { this.startLoadGame(); } // 设置登录超时保护(10秒) if (cc && cc.tween) { this.loginTimeoutHandler = cc.tween(this) .delay(10) .call(function () { console.warn('[UI] Login timeout after 10s, proceeding without SDK'); _this.startLoadGame(); }) .start(); } else { console.warn('[UI] cc.tween not available, using setTimeout'); setTimeout(() => { console.warn('[UI] Login timeout after 10s, proceeding without SDK'); this.startLoadGame(); }, 10000); } return [2]; }); }); }; // 初始化游品SDK def_UI_Entry.prototype.initYPSDK = function () { return __awaiter(this, void 0, void 0, function () { var config; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: if (typeof YPSDK === 'undefined') { console.warn('[YPSDK] YPSDK not available'); return [2]; } config = { gameChannelList: { h5: { platformType: "h5", describe: "默认 H5 渠道", version: "1.0.0" }, tt: { platformType: "tt", appId: "tt09297f94961f881b02", describe: "默认 TT 渠道", version: "1.0.0" }, wx: { platformType: "wx", appId: "wx6baaaa27ab5186ff", describe: "默认 WX 渠道", version: "1.0.0" } } }; return [4, YPSDK.init(39, "https://platform-shop-dev.hanyougame.com", config)]; case 1: _a.sent(); return [4, YPSDK.login()]; case 2: _a.sent(); // 设置登录回调 if (YPSDK.setLoginCallBack) { YPSDK.setLoginCallBack(function (success) { if (success) { // 取消超时处理 if (_this.loginTimeoutHandler) { if (cc && cc.Tween && cc.Tween.stop) { cc.Tween.stop(_this.loginTimeoutHandler); } _this.loginTimeoutHandler = null; } // 初始化重力引擎 if (r_GravityPlatform.default && typeof r_GravityPlatform.default.GA_Init === 'function') { r_GravityPlatform.default.GA_Init(YPSDK.Platform.loginData.bindingId); } _this.startLoadGame(); } }); } else { console.warn('[YPSDK] setLoginCallBack not available'); } return [2]; } }); }); }; // 开始加载游戏资源 def_UI_Entry.prototype.startLoadGame = function () { var tasks = [ this._loadGameConfig.bind(this), this._loadRemoteConfig.bind(this), this._loadExcelData.bind(this), this._loadUserData.bind(this), this._loadCommonBundle.bind(this), this._loadMainBundle.bind(this) ]; this.executeTasksWithProgress(tasks, this._loadGame.bind(this)); // 微信平台特殊处理 if (cc.sys && cc.sys.platform === cc.sys.WECHAT_GAME && typeof mg !== 'undefined') { try { mg.showShareMenu({ menus: ["shareAppMessage", "shareTimeline"] }); } catch (e) { console.warn('[WeChat] Share menu setup failed:', e); } } }; // 带进度监控的任务执行器 def_UI_Entry.prototype.executeTasksWithProgress = function (tasks, finalCallback) { var _this = this; var completed = 0; var failed = 0; var executeNext = function (index) { if (index >= tasks.length) { if (failed === 0) { finalCallback(); } else { console.warn("[Tasks] Completed with " + failed + " failures"); finalCallback(); // 即使有失败也继续 } return; } tasks[index]() .then(function () { completed++; _this._setProgress(completed / tasks.length); executeNext(index + 1); }) .catch(function (err) { console.error("[Task] #" + index + " failed:", err); failed++; _this._setProgress((completed + 0.5) / tasks.length); // 部分进度 executeNext(index + 1); }); }; executeNext(0); }; // 加载Excel数据 def_UI_Entry.prototype._loadExcelData = function () { return new Promise(function (resolve, reject) { if (r_ExcelLoader && r_ExcelLoader.ExcelLoader && r_ExcelLoader.ExcelLoader.loadAll) { r_ExcelLoader.ExcelLoader.loadAll() .then(function () { console.log('[Data] Excel data loaded'); resolve(); }) .catch(function (err) { console.error('[Data] Excel load failed:', err); reject(err); }); } else { console.warn('[Data] ExcelLoader not available'); resolve(); // 非关键任务继续 } }); }; // 加载游戏配置 def_UI_Entry.prototype._loadGameConfig = function () { return __awaiter(this, void 0, void 0, function () { var jsonAsset; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!r_ResLoader || !r_ResLoader.default || !r_ResLoader.default.loadRes) { console.warn('[Config] ResLoader not available'); return [2, Promise.resolve()]; } return [4, r_ResLoader.default.loadRes("resources", "config/GameConfig", cc.JsonAsset)]; case 1: jsonAsset = _a.sent(); if (jsonAsset && r_GameConfig && r_GameConfig.default) { r_GameConfig.default.appConfig = jsonAsset.json; console.log('[Config] Game config loaded'); if (jsonAsset.decRef) { jsonAsset.decRef(); // 释放引用 } return [2, Promise.resolve()]; } else { console.error('[Config] Game config not found'); return [2, Promise.resolve()]; // 非关键错误继续 } } }); }); }; // 加载远程配置 def_UI_Entry.prototype._loadRemoteConfig = function () { return __awaiter(this, void 0, void 0, function () { var remoteUrl, remotePath, remoteConfig; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!r_GameConfig || !r_GameConfig.default || !r_GameConfig.default.appConfig || !r_GameConfig.default.appConfig.RemoteUrl) { console.warn('[Config] RemoteUrl not configured'); return [2, Promise.resolve()]; } remoteUrl = r_GameConfig.default.appConfig.RemoteUrl; remotePath = cc.path.join(remoteUrl, "ADConfig.json"); return [4, r_ResLoader.default.loadRemote(remotePath, { ext: ".json" })]; case 1: remoteConfig = _a.sent(); if (remoteConfig && remoteConfig.json && r_GravityPlatform && r_GravityPlatform.default) { r_GravityPlatform.default.videoId = remoteConfig.json.ADUnitId[0]; if (r_GameConfig && r_GameConfig.default) { r_GameConfig.default.adConfig = remoteConfig.json; } console.log('[Config] Remote config loaded'); return [2, Promise.resolve()]; } else { console.error('[Config] Remote config load failed'); return [2, Promise.resolve()]; // 非关键错误,继续执行 } } }); }); }; // 加载公共资源包 def_UI_Entry.prototype._loadCommonBundle = function () { return new Promise(function (resolve, reject) { if (!r_ResLoader || !r_ResLoader.default || !r_ResLoader.default.loadBundle) { console.warn('[Bundle] ResLoader not available'); resolve(); return; } r_ResLoader.default.loadBundle(r_BundleConfig.BundleNames.Common) .then(function (bundle) { if (bundle) { console.log('[Bundle] Common bundle loaded'); resolve(); } else { console.warn('[Bundle] Common bundle not loaded'); resolve(); // 非关键错误继续 } }) .catch(err => { console.error('[Bundle] Common bundle load failed:', err); resolve(); // 非关键错误继续 }); }); }; // 加载主游戏包 def_UI_Entry.prototype._loadMainBundle = function () { return new Promise(function (resolve, reject) { if (!r_ResLoader || !r_ResLoader.default || !r_ResLoader.default.loadBundle) { console.warn('[Bundle] ResLoader not available'); resolve(); return; } r_ResLoader.default.loadBundle(r_BundleConfig.MainGameBundle) .then(function (bundle) { if (bundle) { console.log('[Bundle] Main game bundle loaded'); resolve(); } else { console.warn('[Bundle] Main game bundle not loaded'); resolve(); // 非关键错误继续 } }) .catch(err => { console.error('[Bundle] Main game bundle load failed:', err); resolve(); // 非关键错误继续 }); }); }; // 加载用户数据 def_UI_Entry.prototype._loadUserData = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { try { if (r_AudioManager && r_AudioManager.AudioMgr && r_AudioManager.AudioMgr.init) { r_AudioManager.AudioMgr.init(); } if (r_GameGlobalVariable && r_GameGlobalVariable.GameGlobalVariable && r_GameGlobalVariable.GameGlobalVariable.initPeiZhi) { r_GameGlobalVariable.GameGlobalVariable.initPeiZhi(); } if (YPSDK && YPSDK.Common && YPSDK.Common.curChannelData && r_YpNetMag && r_YpNetMag.YpNetMag && r_YpNetMag.YpNetMag.failSever) { var platformType = YPSDK.Common.curChannelData.platformType; if (platformType === YPSDK.GamePlatformType.WX || platformType === YPSDK.GamePlatformType.TT) { r_YpNetMag.YpNetMag.failSever(function () { if (r_YpNetMag.YpNetMag) { r_YpNetMag.YpNetMag.isFail = true; } console.warn('[Network] Server connection failed'); }); } } if (YPSDK && YPSDK.Platform && YPSDK.Platform.loginData && r_YpNetMag && r_YpNetMag.YpNetMag && r_YpNetMag.YpNetMag.initServer) { return [2, r_YpNetMag.YpNetMag.initServer(YPSDK.Platform.loginData)]; } else { console.warn('[User] No login data, skipping user init'); return [2, Promise.resolve()]; } } catch (err) { console.error('[User] Load user data failed:', err); return [2, Promise.resolve()]; // 非关键错误 } return [2]; }); }); }; // 初始化游戏主逻辑 def_UI_Entry.prototype._loadGame = function () { try { // 安全访问玩家数据管理器 if (!r_PlayerDataManager || !r_PlayerDataManager.PlayerDataMgr) { throw new Error('PlayerDataManager not available'); } // 获取引导状态 var guideIndex = r_PlayerDataManager.PlayerDataMgr.GetGuideIndexByTaskName(r_Const_Common.GuideName.战斗背包); if (guideIndex !== r_Const_Common.GameBagGuideIndex.引导完结) { // 新玩家流程 if (r_PlayerDataManager.PlayerDataMgr.GMSetGuideIndex) { r_PlayerDataManager.PlayerDataMgr.GMSetGuideIndex( r_Const_Common.GuideName.战斗背包, r_Const_Common.GameBagGuideIndex.引导初始1 ); } if (r_GameDataManager && r_GameDataManager.GameDataMgr && r_GameDataManager.GameDataMgr.ClearGameBagData) { r_GameDataManager.GameDataMgr.ClearGameBagData(); } if (r_GameGlobalVariable && r_GameGlobalVariable.GameGlobalVariable) { r_GameGlobalVariable.GameGlobalVariable.nowlevel = 1; } // 打开游戏场景 if (r_UIManager && r_UIManager.default && r_UIManager.default.open) { r_UIManager.default.open( r_BundleConfig.BundleNames.Game, r_UIConfig_Game.UIView_Game.UI_GameView ); } else { console.warn('[Game] UIManager not available, loading start scene'); cc.director.loadScene('start'); } } else { // 老玩家流程 if (r_EventManager && r_EventManager.EventMgr && r_EventManager.EventMgr.dispatchEvent) { r_EventManager.EventMgr.dispatchEvent(r_EvenType.EVENT_TYPE.Game_Load_View, true); } if (r_UIManager && r_UIManager.default && r_UIManager.default.open) { r_UIManager.default.open( r_BundleConfig.BundleNames.Home, r_UIConfig_Home.UIView_Home.UI_Hall ); } else { console.warn('[Game] UIManager not available, loading start scene'); cc.director.loadScene('start'); } } // 初始化白名单 this.onInitWhiteName(); } catch (error) { console.error('[Game] Load game failed:', error); // 尝试直接进入游戏场景 try { if (cc.director && cc.director.loadScene) { cc.director.loadScene('start'); } } catch (sceneError) { console.error('[Game] Fallback scene load failed:', sceneError); } } }; // 初始化白名单 def_UI_Entry.prototype.onInitWhiteName = function () { return __awaiter(this, void 0, void 0, function () { var url; return __generator(this, function (_a) { try { if (!YPSDK || !YPSDK.Platform || !YPSDK.Platform.loginData || !YPSDK.platformUrl) { console.warn('[WhiteList] YPSDK not initialized, skipping'); return [2]; } url = YPSDK.platformUrl + "/User/GetCfgData?userId=" + YPSDK.Platform.loginData.userUid + "&keyId=NoVideo"; console.log('[WhiteList] Checking:', url); if (r_HttpManager && r_HttpManager.HttpMgr && r_HttpManager.HttpMgr.requestData) { r_HttpManager.HttpMgr.requestData(function (response) { if (response && response.data && response.data.keyData === "true" && r_PlayerDataManager && r_PlayerDataManager.PlayerDataMgr) { r_PlayerDataManager.PlayerDataMgr.WHITE_NAME_NO_VIDEO = true; console.log('[WhiteList] User is in white list'); } }, url); } else { console.warn('[WhiteList] HttpManager not available'); } } catch (err) { console.error('[WhiteList] Init failed:', err); } return [2]; }); }); }; // 设置进度条 def_UI_Entry.prototype._setProgress = function (progress) { if (!this.progress_loading || !this.progress_loading.progress) { return; } progress = Math.max(0, Math.min(1, progress)); this.progress_loading.progress = progress; }; // 属性装饰器 __decorate([ _property(cc.ProgressBar) ], def_UI_Entry.prototype, "progress_loading", void 0); // 类装饰器 def_UI_Entry = __decorate([ _ccclass ], def_UI_Entry); return def_UI_Entry; }(r_UIView.default)); exports.default = def_UI_Entry; // ====== 启动游戏 ====== if (cc && cc.game && cc.game.run) { cc.game.run(gameMainEntry); } else { console.error('[Main] cc.game.run not available, using fallback start'); setTimeout(gameMainEntry, 1000); } UI_Entry.js是我的项目入口吗
07-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值