在Egret实现二维码长按识别

 

Egret中实现生成<img>标签的二维码功能。

 

一  在index.html上给egret的div增加 id = "gameDiv"。我们会根据id获取这个div,并动态添加一个<img>。

<div style="margin: auto;width: 100%;height: 100%;" class="egret-player" id="gameDiv"
         data-entry-class="Main"
         data-orientation="portrait"
         data-scale-mode="fixedWidth"
         data-frame-rate="30"
         data-content-width="640"
         data-content-height="1136"
         data-show-paint-rect="false"
         data-multi-fingered="2"
         data-show-fps="false" data-show-log="false"
         data-show-fps-style="x:0,y:0,size:12,textColor:0xffffff,bgAlpha:0.9">
    </div>

 

 

 二 自定义操作<img>的二维码类QRCode

/**
 * 生成<img>标签二维码
 * @author chenkai
 * @date 2016/12/26
 */
class QRCode{
    /**二维码img标签*/
    private myImg: HTMLImageElement;
    /**二维码图片地址*/
    private imgUrl:string;
    /**Egret中eui.Image二维码图片,用于定位*/
    private codeImg:egret.DisplayObject;
    
    /**重置位置*/
    private onResize(){
        console.log("屏幕旋转,重置二维码位置");
        if(this.imgUrl && this.codeImg){
            this.showCode(this.imgUrl,this.codeImg);
        }
    }

    /**
     * 显示二维码
     * imgUrl 二维码图片地址
     * codeImg egret中二维码图片 (二维码图片容器必须和stage相等高宽)
     */ 
    public showCode(imgUrl: string, codeImg: egret.DisplayObject): void {
        this.imgUrl = imgUrl;
        this.codeImg = codeImg;

     //横竖屏旋转,重置二维码位置
        App.StageUtils.getStage().addEventListener(  //这里的App.StageUtils是我自定义的可全局访问的stage,可以替换成你自己的stage
            egret.StageOrientationEvent.ORIENTATION_CHANGE,this.onResize,this);
        
        //二维码不存在,则创建一个
        if(this.myImg == null){   
            var gameDiv = document.getElementById("gameDiv");
            this.myImg = document.createElement("img");
            this.myImg.src = imgUrl;
            this.myImg.style.position = "absolute";
            this.myImg.style.display = "none";
            gameDiv.appendChild(this.myImg);
        }
        
        //竖屏
        if(document.body.clientWidth < document.body.clientHeight){
            var wScale = document.body.clientWidth / App.StageUtils.stageWidth;
            var hScale = document.body.clientHeight / App.StageUtils.stageHeight;
            this.myImg.style.width = codeImg.width * wScale + "px";
            this.myImg.style.height = codeImg.height * hScale + "px";
            this.myImg.style.left = codeImg.x * wScale + "px";
            this.myImg.style.top = codeImg.y * hScale + "px";
            this.myImg.style.display = "inline";
        //横屏
        }else{
            var wScale = document.body.clientWidth / App.StageUtils.stageHeight;
            var hScale = document.body.clientHeight / App.StageUtils.stageWidth;
            this.myImg.style.width = codeImg.height*wScale + "px";
            this.myImg.style.height = codeImg.width*hScale + "px";
            this.myImg.style.top = (App.StageUtils.stageWidth - codeImg.x - codeImg.width)*hScale + "px";
            this.myImg.style.left = codeImg.y*wScale + "px";
            this.myImg.style.display = "inline";
        }
        
    }
    
    /**隐藏二维码*/
    public hideCode(): void {
        if(this.myImg) {
            this.myImg.style.display = "none";
        }
    }
    
    /**销毁*/
    public onDestroy(){
        App.StageUtils.getStage().removeEventListener(egret.StageOrientationEvent.ORIENTATION_CHANGE,this.onResize,this);
        this.codeImg = null;
    }
}

 

 

三  直接在Egret的exml放置二维码图片,变量名为codeImg

竖屏时效果

 

 横屏时效果

 

 四  使用QRCode生成<img>二维码

var codeImg:eui.Image;    //exml上二维码图片
var qrCode:QRCode = new QRCode();
qrCode.showCode("resource/assets/Button/button_down.png", codeImg);  //button_down.png 随便找的一个蓝色小方块图片

使用QRCode类,在exml的二维码上覆盖一层<img>标签,这里是蓝色透明的,方便观察覆盖的效果,图片有点模糊,懒得找了 - -! 

实际使用时,应该将button_down.png换成你实际的二维码图片。

 

竖屏时效果

 

横屏时效果

 

 

转载于:https://www.cnblogs.com/gamedaybyday/p/6222230.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Egret 中,可以使用 RenderTexture 和 BlendMode 来实现渲染批次。 渲染批次是指将多个绘制操作合并为一个批次,从而减少绘制次数,提高游戏性能。 具体实现步骤如下: 1. 创建一个 RenderTexture 对象,将要渲染的显示对象添加到 RenderTexture 中。 2. 使用 BlendMode 设置渲染模式,将多个 RenderTexture 合并为一个批次。 示例代码如下: ``` // 创建一个 RenderTexture 对象 var renderTexture: egret.RenderTexture = new egret.RenderTexture(); renderTexture.drawToTexture(displayObject); // 设置 BlendMode renderTexture.blendMode = egret.BlendMode.ADD; ``` 在使用 RenderTexture 进行渲染时,可以将多个 RenderTexture 合并为一个批次,从而减少绘制次数,提高游戏性能。例如,可以将多个 RenderTexture 合并到一个 Bitmap 中进行渲染,代码如下: ``` // 创建一个 Bitmap 对象 var bitmap: egret.Bitmap = new egret.Bitmap(); bitmap.width = 800; bitmap.height = 600; // 创建多个 RenderTexture 对象 var renderTexture1: egret.RenderTexture = new egret.RenderTexture(); var renderTexture2: egret.RenderTexture = new egret.RenderTexture(); renderTexture1.drawToTexture(displayObject1); renderTexture2.drawToTexture(displayObject2); // 合并 RenderTexture bitmap.texture = new egret.RenderTexture(); bitmap.texture.drawToTexture(renderTexture1); bitmap.texture.drawToTexture(renderTexture2); // 设置 BlendMode bitmap.blendMode = egret.BlendMode.ADD; ``` 注意,使用渲染批次时需要注意渲染顺序和深度问题,以避免出现渲染错误的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值