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();
    }

}
AI 代码解读

调用方法:

 //震动目标obj,1秒内震动20次,震动最大距离20
 ShakeTool.getInstance().shakeObj(obj, 1, 20, 20);
AI 代码解读
目录
打赏
0
0
0
0
6
分享
相关文章
|
9月前
|
【unity小技巧】FPS游戏实现相机的偏移震动、武器射击后退和后坐力效果
【unity小技巧】FPS游戏实现相机的偏移震动、武器射击后退和后坐力效果
100 1
|
9月前
|
【unity小技巧】最简单的FPS游戏准心跳动动画控制
【unity小技巧】最简单的FPS游戏准心跳动动画控制
82 0
|
9月前
|
【unity小技巧】FPS简单的射击换挡瞄准动画控制
【unity小技巧】FPS简单的射击换挡瞄准动画控制
70 0
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
1266 1
Android性能优化 | 帧动画OOM?优化帧动画之SurfaceView逐帧解析
应用 SurfaceView 逐帧绘制帧动画配合 Bitmap 复用。和原生帧动画的内存压力及卡顿说再见!
955 0
实现场景切换的时候淡入淡出的效果(Unity3D)
在游戏中不可避免的要进行场景切换,如果切换的场景要加载的资源太多太大,那么就要耗时很长时间,这对于用户的体验来说很不舒服,也就是常说的游戏卡了。怎么解决这种尴尬呢。比较推荐的就是异步加载场景,然后中间加一个过渡场景,过渡场景做的美观一些,然后加一个进度条,看起来就不会那么尴尬了。然后在场景过渡的时候,加一个淡入淡出的效果,就很nice了今天就实现一个场景切换的时候淡入淡出的效果。剩下的场景异步加载还有中间过渡场景有时间再写。
Android Camera2 拍照(三)——切换摄像头,延时拍摄和闪光模式
原文:Android Camera2 拍照(三)——切换摄像头,延时拍摄和闪光模式 一、切换摄像头 在前后摄像头之间切换,首先需要关闭之前打开的摄像头,关闭preview,之后重新打开新的摄像头,重新打开preview。
4378 1
短视频开发,实现窗体抖动
短视频开发,实现窗体抖动
187 0
在屏幕上显示字符的原理
只描述在IA-32e模式下的字符显示 首先要有一个字符库(包含这每一个字符的像素信息, 空白的地方时0x00, 一个字符一个8x16的矩阵) 每一个像素点就是一个int类型4bytes大小的整数, 该整数的每一个字节都有特定的属性用来配置显示出来的字符的样式 要想实现, 需要在定义一个二维数组, ...
1051 0
解决WPF的ScrollViewer在使用触摸屏时,滑到尽头窗口抖动的情况
原文:解决WPF的ScrollViewer在使用触摸屏时,滑到尽头窗口抖动的情况 wpf的ScrollViewer在触摸条件下 默认在尽头时会有一个窗口一起被拖动的FeedBack,但对用户的交互很不友好,尤其是全屏应用,一划就看到了后面的桌面。
1466 0

热门文章

最新文章