egret星空项目

技术栈: egret + ts

总共9个页面,画面还是很好看滴~
刚开始看到设计稿的时候,内心OS: 这么短时间交,我的天!!!
写起来后发现其实难度全在第一页了[笑哭]
后面的页面功能大多都很是雷同啊...
总之,继续每天进步一点点吧~

踩坑
  • 问题: 文字逐个加载之前,将所有文字隐藏报错
报错信息

原因: if语句内部文字个数限制范围超出文字总数量
解决方法:

    /* 初始状态下文字消失 */
    for (var i = 0; i < 63; i++) {  // j的限制范围出错 -> 导致alpha属性无法获取到
        this["t" + (i + 1)].alpha = 0;   // 内部 +1 了 !!!
    }  

    /* 动画组内: 文字逐个加载 */
    private idTimeOut;
    private txtShow() {
        for (var i = 0; i < 64; i++) {
            this.idTimeOut = egret.setTimeout(this.onTime.bind(this, i), this, i * 80);  // 注意: 在调用超时触发器之后要将其清除
        }
    }
    private onTime(i) {
        this["t" + (i + 1)].alpha = 1;
    }
  • 问题: 模拟圆圈进度条循环转圈
    实际要实现的效果 -> 进度条旋转一圈之后就暂停

原因: 默认是一个一直动态加载的循环函数,没有写对应的停止函数
解决方法:

    /* 光圈模拟进度条效果 */
    private cirShow() {
        this.angle = 0;  
        egret.startTick(this.onTick, this);
    }
    private angle: number = 0;
    private onTick(): boolean {
        this.changeGraphics(this.angle);
        this.angle += 1;
        if (this.angle >= 360) {
            egret.stopTick(this.onTick, this); // 踩坑点: -> 停止进度条循环效果
            // wy.changeScene(Page1); // 跳转下一页
            return false;
        }
    }
    private changeGraphics(angle: number) {
        var mas: egret.Shape = new egret.Shape();
        mas.graphics.beginFill(0xff0000, 0);
        mas.graphics.lineStyle(150, 0xffffff)
        // 绘制圆弧: 圆弧路径的圆心X轴位置, 圆弧路径的圆心Y轴位置, 圆弧半径, 圆弧起点角度, 圆弧终点角度
        mas.graphics.drawArc(855, 320, 272, 0, angle * Math.PI / 180);
        mas.graphics.endFill();
        this.addChild(mas);
        this.halo.mask = mas;
        this.halo.alpha = 1; // 同理: -> this.halo.visible = true;
    }
  • 问题: 直接运行单个页面没问题,但是从上个页面跳转过来就出问题
    实际要实现的效果 -> 扫描会从上往下循环扫

原因: 从前一个页面过度到如图所示的页面时,是在动画组里面过渡的,父级里面动画添加了循环效果,导致子级继承了父级的动画,因此该页面一直在循环不间断的调用.
解决方法: 将跳转页面的代码放到if语句里面,该语句的作用是对动画是否已运行进行判断,如果运行过了就不会再次运行了
/* 动画: 上下扫描 */
    private animation() {
        egret.Tween.get(this.scan, { loop: true }).to({ y: 395 }, 2000).to({ y: 152 }, 2000);
    }
  • 问题: 元素身上添加点击效果失效

原因: 层级问题,该元素被其他元素覆盖了
解决方法:
  将覆盖住该元素的元素隐藏掉alpha/visible,结果发现并没有用,问题还是存在.原因在于虽然将他们隐藏了,但实际还是占位的,所以依旧点击不到该元素!所以,最终采取的方法是,直接将覆盖住该元素的元素移除舞台removeChild,等需要用到时再添加addChild

  • 问题: 触碰后,隔一秒就会消失
    实际要实现的效果 -> 只有长按住指纹的时间有一秒,指纹校验框才会消失

原因: 没有进行触摸时间长短的判断,所以会导致,只要手指碰触到目标元素,那么一秒后校验框就会消失!!!
解决方法:

    private idTimeOut;
    private onTouchBegin(e: egret.TouchEvent): void {
        this.idTimeOut = egret.setTimeout(this.onTouch,this,1000);  // 等待一秒后,执行onTouch方法
    }
    private onTouchEnd(){   // 踩坑点: 判断是否按住的时间有1s,如果没有,清除该方法!
        egret.clearTimeout(this.idTimeOut);
    }
    private onTouch(){
        egret.Tween.get(this.fingerprint).to({alpha:0},500).call(()=>{
            egret.Tween.get(this.Validatebox).to({alpha:0},500).call(()=>{

            })
        })
    }
项目参考资料:

1. startTick 函数
2. setTimeOut函数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,588评论 1 45
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,786评论 1 92
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 4,036评论 0 0
  • 在家里,尽管腆着大肚子,我爸爸穿裤子都得系上一条皮带。不寄皮带的西裤,不扯便掉。 对男的身材有点不解?为毛要系皮带...
    梅林的胡子有点多阅读 2,227评论 0 2
  • 立梅是我的初中同学。可是毕业之后我们再无联系,以致我俩对彼此都没有什么印象。 重新见面是在毕业30周年的同学会上。...
    9198b4fcf27e阅读 576评论 0 0