`
ch_kexin
  • 浏览: 902525 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

最近游戏再接入腾讯小游戏, 文档要求 在 QQ切换到后台的时候要停止webgl的渲染,不然在iphone上会崩溃

 
阅读更多

白鹭引擎v2.0+ API

在白鹭引擎2.0+ 版本,通过监听stage对象的egret.Event.ACTIVATEegret.Event.DEACTIVATE事件实现生命周期控制,代码示例如下:

stage.addEventListener(egret.Event.ACTIVATE,()=>{
console.log("app 进入前台");
},this);
stage.addEventListener(egret.Event.DEACTIVATE,()=>{
console.log("app 进入后台");
},this);

 上述方法的缺点是:

  1. 对象的“生命周期”行为与 stage对象耦合。
  2. 由于一些 HTML5 游戏的运行环境(比如手机QQ等)设置了独有的 API 而非 HTML5 标准 API,开发者难以对白鹭引擎的底层进行自定义扩展。

白鹭引擎v4.1+ API

白鹭引擎 4.1 版本引入生命周期管理器:egret.lifecycle。其代码示例如下:

egret.lifecycle.onPause = ()=> {
console.log("app 进入后台");
egret.ticker.pause(); // 关闭渲染与心跳
}
egret.lifecycle.onResume = ()=> {
console.log("app 进入前台");
egret.ticker.resume(); // 打开渲染与心跳
}

 针对不同的游戏运行环境,开发者可以对生命周期管理器进行扩展,以手机QQ举例,其扩展如下:

// 手机QQ注册了 appInBackgound 这一变量,在 TypeScript 中进行声明,防止报错
declare interface Window {
appInBackgound:boolean;
}
egret.lifecycle.addLifecycleListener( (context)=>{
// 方法一:通过事件监听的方式进行通知
document.addEventListener("qbrowserVisibilityChange", function(e:any){
if (e.hidden){
context.pause();
}
else{
context.resume();
};
});
// 方法二:在每一帧进行判断
context.onUpdate = ()=> {
if (window.appInBackgound){
context.pause();
}
else{
context.resume();
}
}
} )

 完整Demo:

  /* 初始化事件 */
    private initLifecycle(): void {
        egret.lifecycle.addLifecycleListener((context) => {
            // custom lifecycle plugin
            document.addEventListener("visibilitychange", function (e) {
                // document.title = document.hidden ? "用户离开了" : "用户回来了";
                if (document.hidden) {
                    // 网页被挂起 ---- 暂停音乐
                    console.log(" 网页被挂起");
                    context.pause();
                }
                else {
                    // 网页被呼起 ---- 播放音乐
                    console.log(" 网页被呼起");
                    context.resume();
                }
                console.log(document);
                console.log(e);
            });
            document.addEventListener("qbrowserVisibilityChange", function (e: any) {
                if (e.hidden) {
                    // 手Q被挂起
                    console.log(" 手Q被挂起");
                    context.pause();
                }
                else {
                    // 手Q被呼起
                    console.log(" 手Q被呼起");
                    context.resume();
                };
            });
            context.onUpdate = () => {
            }
        })
        egret.lifecycle.onPause = () => {
            console.log("APP 进入后台");
            StageReferance.stage.frameRate = 0.01;
            egret.ticker.pause(); // 关闭渲染与心跳
            SoundMusic.stop();
        }
        egret.lifecycle.onResume = () => {
            console.log("APP 进入前台");
            StageReferance.stage.frameRate = 30;
            egret.ticker.resume(); // 打开渲染与心跳
            SoundMusic.resume();
        }
    }

 

分享到:
评论

相关推荐

    汽车小游戏.zip webgl

    【标题】"汽车小游戏.zip webgl" 涉及的核心技术是WebGL,这是一种在网页浏览器中实现3D图形渲染的API,它基于OpenGL标准,并且完全融入了JavaScript语言,使得开发者无需安装任何插件就能在浏览器上创建交互式的3D...

    小游戏webgl与canvas2d混合使用demo

    在本文中,我们将深入探讨如何在Web开发中...总结来说,结合WebGL和Canvas2D可以在小游戏开发中创造出既高效又富有表现力的体验。通过熟练掌握这两种技术,你可以构建出跨越2D和3D维度的创新游戏,满足各种用户需求。

    Unity3d 微信小程序(小游戏)项目实现接入广告(banner、插屏和激励广告等)Demo源码

    Unity3d 微信小程序(小游戏)项目实现接入广告(banner、插屏和激励广告等)Demo源码。 建议先看说明:https://blog.csdn.net/qq_33789001/article/details/128775839 广告虽然能够给平台和开发者带来一定的收益,...

    Threejs开发指南:基于WebGL和HTML5在网页上渲染3D图形和动画.docx

    "Threejs 开发指南:基于 WebGL 和 HTML5 在网页上渲染 3D 图形和动画" 本文将对 Threejs 开发指南进行详细的介绍,包括 Threejs 的重要性、与其他 3D 渲染技术的比较、为什么要使用 Threejs 等。 首先,Threejs ...

    Unity WebGL 微信小游戏适配方案

    Unity WebGL 小游戏适配方案(又称团结Unity快适配),本方案设计目的是降低 Unity 游戏转换到微信小游戏的开发成本。基于WebAssembly技术,无需更换Unity引擎与重写核心代码的情况下将原有游戏项目适配到微信小游戏。

    webGL开发指南文档

    WebGL(Web Graphics Library)是一种JavaScript API,它允许在任何兼容的现代Web浏览器中进行硬件加速的3D图形渲染,无需插件。WebGL使得前端开发者能够创建交互式的三维场景,将互联网体验提升到一个新的层次。...

    webgl文档以及工具

    WebGL是一种在网页浏览器中实现3D图形渲染的技术,它基于OpenGL ES 2.0标准,使得开发者无需安装任何插件就能在任何支持HTML5的浏览器上创建丰富的、交互式的3D图形。这个"webgl文档以及工具"的压缩包很可能包含了...

    超快的2d渲染引擎支持webgl和canvas渲染让游戏制作变得超级容易

    在IT行业中,2D渲染引擎是游戏开发领域的重要组成部分,特别是在网页游戏开发中。本文将深入探讨“超快的2D渲染引擎”及其对游戏制作的显著影响,重点关注其对WebGL和Canvas的支持。 首先,让我们理解什么是2D渲染...

    Unity Webgl 讯飞语音

    Unity WebGL 是Unity游戏引擎的一个重要特性,它允许开发者将3D和2D游戏无缝地部署到Web平台上,无需用户下载安装任何插件。这极大地拓宽了游戏的分发渠道,使得游戏可以在各种浏览器上运行。在Unity WebGL项目中...

    WebGL Overview

    - 尽管如此,运行非常复杂的WebGL应用可能会导致系统资源紧张,甚至崩溃。 - IE浏览器不原生支持WebGL,但可以通过安装插件来实现支持。 7. WebGL开发入门: - 获取Canvas对象:开发者首先需要获取HTML中的Canvas...

    采用webGl技术实现的H5游戏

    WebGL的核心在于顶点着色器和片段着色器,它们是运行在GPU上的小程序,分别处理几何数据和像素颜色。 在H5游戏中,WebGL的优势主要体现在以下几个方面: 1. **硬件加速**:WebGL直接利用了用户的GPU资源,使得3D...

    在原始WebGL2中实现不同复杂度的渲染算法

    综上所述,"在原始WebGL2中实现不同复杂度的渲染算法"涵盖的内容广泛,从基础的几何绘制到复杂的光照和纹理效果,再到JavaScript中的图片处理和高性能的着色器编程。学习并掌握这些技术,可以让你在Web 3D图形领域...

    用 WebGL 打造 HTML5 游戏引擎平台.pdf

    WebGL游戏在移动设备上的表现尤其受到重视,因为移动平台的多样性和性能限制对游戏引擎提出了更高的要求。这包括对移动设备硬件加速的支持,对不同浏览器兼容性的适配,以及在有限的资源下优化游戏性能和电池使用...

    unity发布webgl并部署到服务器配置文件

    Unity引擎是一款强大的跨平台游戏开发工具,它支持创建2D、3D、VR和AR等多种类型的游戏,并且可以通过WebGL技术将游戏发布到Web端,让玩家无需下载安装即可在线游玩。本篇将深入探讨如何在Unity中发布WebGL项目,并...

    webgl文档开发教程

    webgl文档开发教程

    unity编辑器自定义微信小游戏版转webgl设置.rar

    本资源"unity编辑器自定义微信小游戏版转webgl设置.rar"正是这样一个工具,它包含了一个名为"PlatformSetting.cs"的C#脚本,用于帮助用户快速地在微信小游戏和WebGL之间切换发布配置。 首先,我们要理解Unity编辑器...

    webGL编程示例源码

    WebGL 是一项在网页上渲染三维图形的技术,也是HTML5 草案的一部分。 《WebGL编程指南》的主要篇幅讲解了WebGL 原生API 和三维图形学的基础知识,包括渲染管线、着色器、矩阵变换、着色器编程语言(GLSL ES)等等,...

    WebGL的颜色渲染-渲染一张DEM(数字高程模型)

    WebGL是一种基于OpenGL标准的JavaScript API,用于在任何兼容的Web浏览器中实现三维图形的绘制。它使得开发者能够在网页上创建交互式的3D场景,无需任何插件。在这个主题中,我们将深入探讨如何使用WebGL来渲染一张...

    WEBGL1.0中文版

    与传统的Web开发相比,WebGL免去了开发专用渲染插件的繁琐过程,使得创建具有复杂3D结构的网站页面和设计3D网页游戏变得更为简单。 #### 二、WebGL的技术特性 - **JavaScript与OpenGL ES 2.0结合**:WebGL通过在...

    WEBGL_webgl_

    WebGL是一种基于OpenGL标准的JavaScript API,用于在任何兼容的Web浏览器中实现交互式的2D和3D图形渲染。这个“WEBGL_webgl_”很可能是一份教程或教材,旨在帮助初学者掌握WebGL技术,并随着学习者的进步不断更新...

Global site tag (gtag.js) - Google Analytics