热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

屏幕震动效果

packagetools{importflash.display.DisplayObject;importflash.events.TimerEvent;importflash




?






1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141


package tools {

    import
flash.display.DisplayObject;

    import
flash.events.TimerEvent;

    import
flash.utils.Timer;   

 

    public
class Earthquake {

       /**

        * 参数

        */

        private
var _timer:Timer;

        private
var _displayObject:DisplayObject;

        private
var _originalX:int;

        private
var _originalY:int;

        private
var _intensity:int;

        private
var _intensityOffset:int;

        /**

         * 时间

         */

        private
var _seconds:Number;

        /**

         * 方向

         */

        public
static const LEFT_RIGHT_UP_DOWN:int
= 0;

        public
static const LEFT_RIGHT:int
= 1;

        public
static const UP_DOWN:int
= 2;

        /**

         * 帧频

         */

        public
static const FRAME_RATE:int
= 60;

        /**

         * 方向

         */

        private
var _direction:int;

        /**

         * 震动中

         */

        private
var _bShaking:Boolean
= false;

        /**

         * 是否自动销毁

         */

        private
var _bDestroy:Boolean
= false;

         

         /**

          * 对一个显示对象应用地震效果。

          * @param  displayObject 抖动对象

          * @param  intensity 强度

          * @param  seconds 持续时间 秒

          * @param  direction 方向

          * @param  autoDestroy 自动销毁

          */

        public
function Earthquake(displayObject:DisplayObject, intensity:Number
= 10, seconds:Number
= 1, direction:int
= 0, autoDestroy:Boolean
= false):void

        {

            _displayObject = displayObject;

            _originalX = displayObject.x;

            _originalY = displayObject.y;

            _intensity = intensity;

            _intensityOffset = intensity / 2;

            _secOnds= seconds;

            _direction = direction;

            _bDestroy = autoDestroy;

        }

        /**

         * 开始后抖动

         */

        public
function go():void

        {

            if
(_bShaking) return;

            _bShaking = true;

            var
msPerUpdate:int
= int(1000
/ FRAME_RATE);

            var
totalUpdates:int
= int(_seconds * 1000
/ msPerUpdate);

             

            if
(!_timer)

            {

                _timer = new
Timer(msPerUpdate, totalUpdates);

                _timer.addEventListener(TimerEvent.TIMER, quake);

                _timer.addEventListener(TimerEvent.TIMER_COMPLETE, resetImage);

            }

            else

            {

                _displayObject.x = _originalX;

                _displayObject.y = _originalY;

                _timer.reset();

            }

            _timer.start();

        }

        /**

         * 抖动

         * @param   event

         */

        private
function quake( event:TimerEvent ):void

        {

            var
newX:int = _originalX;

            var
newY:int = _originalY;

             

            switch(_direction)

            {

                case
LEFT_RIGHT_UP_DOWN:

                    newX = _originalX + Math.random() * _intensity - _intensityOffset;

                    newY = _originalY + Math.random() * _intensity - _intensityOffset;

                    break;

                case
LEFT_RIGHT:

                    newX = _originalX + Math.random() * _intensity - _intensityOffset;

                    break;

                case
UP_DOWN:

                    newY = _originalY + Math.random() * _intensity - _intensityOffset;

                    break;

            }

            _displayObject.x = newX;

            _displayObject.y = newY;

        }

        /**

         * 重置

         * @param   event

         */

        private
function resetImage( event:TimerEvent = null
):void

        {

            _displayObject.x = _originalX;

            _displayObject.y = _originalY;

            cleanup();

        }

        /**

         * 清除

         */

        private
function cleanup():void

        {

            _bShaking = false;

            /*_timer = null;

            _timer.stop();*/

            _timer.reset();

            if
(_bDestroy)

            {

                _timer.removeEventListener(TimerEvent.TIMER, quake);

                _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, resetImage);

                _timer = null;

                _displayObject = null;

            }

            delete
[this];

            //_displayObject = null;

        }

    }

class="line number141 index140 alt2">}


推荐阅读
  • 本文探讨了C++编程中理解代码执行期间复杂度的挑战,特别是编译器在程序运行时生成额外指令以确保对象构造、内存管理、类型转换及临时对象创建的安全性。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文详细介绍了get和set方法的作用及其在编程中的实现方式,同时探讨了点语法的使用场景。通过具体示例,解释了属性声明与合成存取方法的概念,并补充了相关操作的最佳实践。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本文详细介绍了一种高效的算法——线性筛法,用于快速筛选出一定范围内的所有素数。通过该方法,可以显著提高求解素数问题的效率。 ... [详细]
  • 深入理解ExtJS:从入门到精通
    本文详细介绍了ExtJS的功能及其在大型企业前端开发中的应用。通过实例和详细的文件结构解析,帮助初学者快速掌握ExtJS的核心概念,并提供实用技巧和最佳实践。 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 本文详细介绍如何在 iOS 7 环境下申请苹果开发者账号,涵盖从访问开发者网站到最终激活账号的完整流程。包括选择个人或企业账号类型、付款方式及注意事项等。 ... [详细]
  • 本文介绍了如何通过Java代码计算一个整数的位数,并展示了多个基础编程示例,包括求和、平均分计算、条件判断等。 ... [详细]
  • 本篇文章介绍如何将两个分别表示整数的链表进行相加,并生成一个新的链表。每个链表节点包含0到9的数值,如9-3-7和6-3相加得到1-0-0-0。通过反向处理链表、逐位相加并处理进位,最终再将结果链表反向,即可完成计算。 ... [详细]
  • CentOS 系统管理基础
    本文介绍了如何在 CentOS 中查询系统版本、内核版本、位数以及磁盘分区的相关知识。通过这些命令,用户可以快速了解系统的配置和磁盘结构。 ... [详细]
  • 本文详细探讨了 PHP 中 method_exists() 和 is_callable() 函数的区别,帮助开发者更好地理解和使用这两个函数。文章不仅解释了它们的功能差异,还提供了代码示例和应用场景的分析。 ... [详细]
  • 本文详细介绍了如何解决 Microsoft SQL Server 中用户 'sa' 登录失败的问题。错误代码为 18470,提示该帐户已被禁用。我们将通过 Windows 身份验证方式登录,并启用 'sa' 帐户以恢复其访问权限。 ... [详细]
author-avatar
飞儿gxj_505
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有