让前端飞Egret开放平台

egret轻触屏幕调整显示对象位置

2019-04-01  本文已影响0人  IrisLong
效果示意图 -- 需求: 圆圈跟随光标移动
逻辑(超简单,但很容易踩坑)
  1. 画一个圆
    private draw() {
        var drawCir:egret.Shape = new egret.Shape();
        drawCir.graphics.beginFill(0xfff000);
        drawCir.graphics.drawCircle(0, 0, 50);
        drawCir.x = drawCir.y = 100;
        drawCir.graphics.endFill();
        this.addChild(drawCir);
    }

1)为什么不直接将第三四行代码整合成一行? 形如: drawCir.graphics.drawCircle(100, 100, 50);
  答: 如果圆,初始圆心的x,y轴坐标固定为100,那么后面鼠标点击舞台的时候,圆心没办法刚好是鼠标点击的位置,会增加额外计算量.

  1. 给舞台添加鼠标点击事件
            this.stage.addEventListener(egret.TouchEvent.TOUCH_BEGIN, (e: egret.TouchEvent) => {
                drawCir.x = e.localX;
                drawCir.y = e.localY;
            }, this);

1)直接这么写,会导致黄色圆圈以外的区域,点击效果失效,为什么?
  答: 跟代码加载速度有关,监听事件会发生在将绘制的圆圈添加到舞台之前.
  解决方法: 给舞台监听事件添加一个计时器,延缓其加载速度,确保监听事件发生在将绘制的圆圈添加到舞台之后.
修改后的代码如下

        egret.setTimeout(() => {
            this.stage.addEventListener(egret.TouchEvent.TOUCH_BEGIN, (e: egret.TouchEvent) => {
                drawCir.x = e.localX;
                drawCir.y = e.localY;
            }, this);
        }, this, 500);
上一篇下一篇

猜你喜欢

热点阅读