egret屏幕抖动效果

简介: egret屏幕抖动效果
推荐阅读:
/**
 * 屏幕抖动
 * @author shirln
 * @since 2018/11/27
 * 
 * Example:
 * 震动目标obj,1秒内震动20次,震动最大距离20
 * ShakeTool.getInstance().shakeObj(obj, 1, 20, 20);
 */
class ShakeTool {
    private static instance:ShakeTool;   //单例
    private initX:number;                //初始位置
    private initY: number;  
    private target:egret.DisplayObject;  //震动目标
    private maxDis: number;              //震动距离
    private count: number = 0;           //计时器次数
    private rate: number;                //一秒震动次数
    private timer:egret.Timer = new egret.Timer(1000);
    
    public static getInstance():ShakeTool{
        if(this.instance == null){
            this.instance = new ShakeTool();
        }
        return this.instance;
    }
    
    /**
     * 震动显示对象
     * @param        target    震动目标对象
     * @param        time      震动持续时长(秒)
     * @param        rate      震动频率(一秒震动多少次)
     * @param        maxDis    震动最大距离
     */
    public shakeObj(target: egret.DisplayObject,time: number,rate: number,maxDis: number): void {
        this.stop();
        this.target = target;
        this.initX = target.x;
        this.initY = target.y;
        this.maxDis = maxDis;
        this.count = time * rate;
        this.rate = rate;
    
        this.timer.delay = 1000/rate;
        this.timer.repeatCount = this.count;
        this.timer.addEventListener(egret.TimerEvent.TIMER,this.shaking, this);
        this.timer.addEventListener(egret.TimerEvent.TIMER_COMPLETE, this.shakeComplete, this);
        this.timer.reset();
        this.timer.start();
    }
    
    private shaking(): void {
        egret.Tween.removeTweens(this.target);
        this.target.x = this.initX - this.maxDis + Math.random()*this.maxDis*2;
        this.target.y = this.initY - this.maxDis +  Math.random()*this.maxDis*2;
        egret.Tween.get(this.target).to({x:this.initX, y:this.initY},999/this.rate);    
    }
    
    private shakeComplete(): void {
        if(this.target){
            egret.Tween.removeTweens(this.target);
            this.target.x = this.initX;
            this.target.y = this.initY;
            this.target = null;
        }
        this.timer.removeEventListener(egret.TimerEvent.TIMER,this.shaking,this);
        this.timer.removeEventListener(egret.TimerEvent.TIMER_COMPLETE,this.shakeComplete,this);
    }

    /**停止震动 */
    public stop(){
        this.shakeComplete();
    }

}

调用方法:

 //震动目标obj,1秒内震动20次,震动最大距离20
 ShakeTool.getInstance().shakeObj(obj, 1, 20, 20);
相关文章
|
存储 机器学习/深度学习 人工智能
AI仓库管理
AI仓库管理运用人工智能优化存储、订单处理、路径规划和库存管理,提高效率、准确性,降低成本。包括智能存储推荐、订单分配、拣选路径规划、图像识别、自然语言处理、预测分析、自动化操作和实时库存跟踪。此外,集成物联网、无人机、机器人和区块链技术,提升效率和安全性。AI仓库管理为商家带来智能化决策支持和自动化解决方案。
1091 1
|
资源调度 JavaScript API
uniapp项目vue2升级vue3
uniapp项目vue2升级vue3
924 0
|
12月前
|
传感器 存储 安全
智能包装:食品保鲜与追踪的创新
【10月更文挑战第20天】智能包装通过传感器、微电子和物联网技术,实现实时监测和调节食品环境条件,延长食品保鲜期,确保食品安全。本文探讨其基本原理、技术创新、实际应用及未来趋势,展示其在食品行业中的革命性变化。
WK
|
11月前
|
开发框架 移动开发 Java
C++和Java哪个更适合开发移动应用
本文对比了C++和Java在移动应用开发中的优劣,从市场需求、学习难度、开发效率、跨平台性和应用领域等方面进行了详细分析。Java在Android开发中占据优势,而C++则适合对性能要求较高的场景。选择应根据具体需求和个人偏好综合考虑。
WK
332 0
|
Linux
Centos查看已经安装的软件或者包
Centos查看已经安装的软件或者包
584 0
|
程序员 CDN
github Release 下载加速,绿色合法,遥遥领先
你有没有这样一个困惑,当你寻找了很久终于找到一个解决问题的方案,发现这个工具在 GitHub 上,接下来等待我们的就是遥遥无期的龟速下载。
914 0
github Release 下载加速,绿色合法,遥遥领先
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
模型训练数据-MinerU一款Pdf转Markdown软件
MinerU是由上海人工智能实验室OpenDataLab团队开发的开源智能数据提取工具,专长于复杂PDF文档的高效解析与提取。它能够将含有图片、公式、表格等多模态内容的PDF文档转化为Markdown格式,同时支持从网页和电子书中提取内容,显著提升了AI语料准备的效率。MinerU具备高精度的PDF模型解析工具链,能自动识别乱码,保留文档结构,并将公式转换为LaTeX格式,广泛适用于学术、财务、法律等领域。
1331 4
|
机器学习/深度学习 PyTorch 算法框架/工具
探索PyTorch:张量的类型转换,拼接操作,索引操作,形状操作
探索PyTorch:张量的类型转换,拼接操作,索引操作,形状操作
|
SQL 前端开发 Java
若依修改03----利用若依代码生成器,生成课程管理的前后端代码,课程的条件搜索接口,一旦数据表创建好了,直接交给若依代码的生成器就好了,配置代码生成信息,包含基本信息,字段信息,生成信息。字段信息决
若依修改03----利用若依代码生成器,生成课程管理的前后端代码,课程的条件搜索接口,一旦数据表创建好了,直接交给若依代码的生成器就好了,配置代码生成信息,包含基本信息,字段信息,生成信息。字段信息决