百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

egret3D与2D混合开发,画布尺寸不一致的问题

myzbx 2025-03-10 18:42 20 浏览

egret3d的GUI目前还没有,在做3d游戏的时候没有UI可用,只能使用egret2d的EUI组件库,egret3d与egret2d混合开发,canvas3d的大小与位置与canvas2d并没有重合,导致适配ui时总是错位。在做手机屏幕适配的时候必须解决这种问题,我的解决方法是两个属性相同。

我的解决方案为修改源码,在egret2d适配屏幕的时候加入自定义接口,通过事件的方式通知适配canvas3d的大小和位置。

先看下效果如何

转屏适配

增加Diy接口

打开 egret engine,跳转到引擎的根目录下,进入src->egret->diy->RMCanvas2DView.tsdiy->RMCanvas2DView.ts为自己创建的文件,目的是为了从引擎底部调出接口。

module RM {
    export class RMCanvas2DView {

        public static canvasW:number = 0;
        public static canvasH:number = 0;
        public static canvasX:number = 0;
        public static canvasY:number = 0;
        public static canvasR:string = 'rotate(0deg)';

        public static eventDispatcher:egret.EventDispatcher = new egret.EventDispatcher;

        public constructor {
        }
    }
}

修改WebPlayer.ts源码


WebPlayer.updateScreenSize
函数的最后加上代码:

/**
 * @private
 * 更新播放器视口尺寸
 */
public updateScreenSize:void {

    ......
    this.player.updateStageSize(stageWidth, stageHeight);//不要在这个方法后面修改属性
    //函数的最下面加上以下代码
    RM.RMCanvas2DView.canvasW = displayWidth;
    RM.RMCanvas2DView.canvasH = displayHeight;
    RM.RMCanvas2DView.canvasX = +canvas.style.left.split('px')[0];
    RM.RMCanvas2DView.canvasY = +canvas.style.top.split('px')[0];
    RM.RMCanvas2DView.canvasR = canvas.style.transform;
    RM.RMCanvas2DView.eventDispatcher.dispatchEvent(egret.Event.create(
    egret.Event,egret.Event.RESIZE));
}

编译引擎

通过egret create命令创建的项目,在项目的根目录下执行一次egret make命令,编译完成后,在项目中看看是否有RMCanvas2DView类,如果没有,请重新看下步骤,重试以下。

监听屏幕适配变化

然后在游戏启动时加入事件监听器回调函数

class WorldCanvas {
    private _canvas3d:egret3d.Egret3DCanvas;
    private _view3d:egret3d.View3D;

    public constructor {
        this.initCanvas;
        this.initHtmlCanvas;
    }

    private initCanvas:void {
        this._canvas3d = new egret3d.Egret3DCanvas;
        this._canvas3d.width = GameConfig.STAGE_W;
        this._canvas3d.height = GameConfig.STAGE_H;
        this._canvas3d.x = this._canvas3d.y = 0;

        this._view3d = new egret3d.View3D( 0, 0, GameConfig.STAGE_W, GameConfig.STAGE_H );
        this._view3d.backColor = 0x00000000;
        this._canvas3d.addView3D( this._view3d );
        this.onResize;
        RM.RMCanvas2DView.eventDispatcher.addEventListener( egret.Event.RESIZE, this.onResize, this );
    }

    private initHtmlCanvas:void
    {
        var canvas = document.getElementById( "egret3D" );
        if ( canvas ) {
 canvas.style[ 'position' ] = 'absolute';
 canvas.style[ 'cursor' ] = 'inherit';
 canvas.style[ 'bottom' ] = '0px';
 canvas.style[ 'right' ] = '0px';
 canvas.style[ 'transform-origin' ] = '0% 0% 0px';
        }
    }

    public onResize( $e? ):void {
        this._canvas3d.x = RM.RMCanvas2DView.canvasX;
        this._canvas3d.y = RM.RMCanvas2DView.canvasY;
        var canvas = document.getElementById( "egret3D" );
        if ( canvas ) {
 canvas.style[ 'transform' ] = RM.RMCanvas2DView.canvasR;
 canvas.style['width'] = RM.RMCanvas2DView.canvasW+'px';
 canvas.style['height'] = RM.RMCanvas2DView.canvasH+'px';
        }
    }
}

这样就把2D引擎适配的结果传递给3D了。旋转缩放都没有问题了,可以使用2D下的所有适配模式。 有问题请联系哦!目前我以这种模式已做了2个egret3d项目喽~不过目前并没有上线运营。

相关推荐

砌体植筋拉拔试验检验值到底是6.0KN,还是10.2KN,如何计算确定

砌体拉结筋植筋养护完成后,需对所植钢筋进行拉拔试验,以检验植筋的锚固强度是否满足设计要求。检测时,按照一定的抽样比例进行拉拔试验。根据《混凝土结构后锚固技术规程》JGJ145-2013,以同品种、同...

柴油机功率如何计算?计算柴油机功率需要哪些参数?

在汽车领域,对于柴油机功率的计算是一项重要的工作,它有助于我们更好地了解柴油机的性能和适用场景。下面我们就来详细探讨一下柴油机功率的计算方法以及所需的参数。首先,我们要了解计算柴油机功率常用的公式。在...

变压器短路阻抗的作用和计算方法(变压器短路阻抗的作用和计算方法是什么)

变压器短路阻抗的作用和计算方法短路阻抗是在负载试验中测量的一项数据,它是二次侧短接并流过额定电流时,一次侧施加的电压与额定电压的的百分数。那么测量变压器的短路阻抗有什么意义呢?其实变压器的阻抗电压乃是...

9.35m层高高支模支撑架计算书(支模架多高属于高支模)

某工厂新扩建的建筑面积为1989.2m^2,建筑物总体分为2层,但局部为4层。建筑物檐高19.4m,建筑物总高23m。建筑物呈长方形设置,长度为48.20m,宽度为23.88m,结构形式为框架结构...

吊篮(悬挂装置前梁加长)安全复核计算书

吊篮(悬挂装置前梁加长)安全复核计算书一种超常规搭设的高处作业吊篮,因使用要求将吊篮悬挂装置前梁加长设置,本计算书针对这种工况的校核,以作参考。计算依据:1、《高处作业吊篮》GB/T19155-...

电功率计算公式精编汇总(电功率计算视频讲解)

一、电功率计算公式:1在纯直流电路中:P=UIP=I2RP=U2/R式中:P---电功率(W),U---电压(V),I----电流(A),R---电阻(Ω)。2在单相交流电路中:P=UIcosφ...

灌注桩承载力检测方法及步骤(灌注桩承载力不够怎么办)

检测灌注桩的承载力是确保基础工程安全可靠的关键环节,检测结果的精细能准确为我们提供可靠的数据,让我们能准确判断桩基础的承载力,方便后续施工安排,同样也能让我们根据数据分辨出有问题桩基,采取可靠有效的措...

很哇塞的体积计算方法:向量叉乘 很哇塞的体积计算方法

高中数学必看:向量叉乘,体积的神。大家都知道a、b的向量是什么意思,但是a、b的向量又是什么?很多同学都不知道,向量的向量在高中阶段非常有用,虽然它是大学的知识,在高中阶段可以干两件事。·第一件事,表...

施工升降机基础(设置在地库顶板回顶)计算书

施工升降机基础(设置在地库顶板回顶)计算书计算依据:1、《施工现场设施安全设计计算手册》谢建民编著2、《建筑地基基础设计规范》GB50007-20113、《混凝土结构设计标准》GB/T50010-2...

剪力墙水平钢筋根数如何计算?(剪力墙水平钢筋绑扎搭接规范)

剪力墙水平钢筋根数的计算需综合考虑墙高、起步距离、间距及构造要求等因素,具体步骤如下及依据:1.基本计算公式水平钢筋根数计算公式为:根数=(墙高-起步距离)/间距(墙高-起步距离)/间距...

直流电路常用计算公式(直流电路常用计算公式有哪些)

1、电阻导体阻碍电流通过的能力叫做电阻,用字母R表示,单位欧(Ω)。R=ρl/s式中R-导体的电阻,欧(Ω);ρ-导体的电阻率,欧·米(Ω·m);l-导体的长度,米(m);s-导体的截面积,平方米(m...

电气主电路图的绘制特点(电气原理图主电路)

1、电气主电路图中的电气设备、元件,如电源进线、变压器、隔离开关、断路器、熔断器、避雷器等都垂直绘制,而母线则水平绘制。电气主电路图除特殊情况外,几乎无一例外地画成单线图,并以母线为核心将各个项目(如...

中考总复习:物理专题 功和机械能 (功的计算、功率、动能、势能)

中考物理专题:功与机械能解析一、力学中的功——能量转化的桥梁功是力对物体能量变化的量度,需满足两要素:作用在物体上的力、物体沿力方向移动距离。例如推箱子时,若箱子未移动,推力不做功;若箱子滑动,推力做...

40亿QQ号,不超过1G内存,如何去重?

分享一道网上很火的面试题:40亿QQ号,不超过1G的内存,如何去重?这是一个非常经典的海量数据去重问题,并且做了内存限制,最多只能1GB,本文跟大家探讨一下~~一、常规思路我们日常开发中,如果谈到去重...

填充墙体拉结筋植筋深度、孔径、拉拔试验承载力计算!

今天分享下植筋间距及保护层要求:根据JGJ145-2013混凝土后锚固技术规程要求植筋与混凝土结构边缘不应小于5mm,植筋为两根及以上时水平间距为不应小于5d(d为钢筋直径)。根据混凝土结构后锚固技...