热门标签 | 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">}


推荐阅读
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
  • 本文通过一个具体的实例,介绍如何利用TensorFlow框架来计算神经网络模型在多分类任务中的Top-K准确率。代码中包含了随机种子设置、模拟预测结果生成、真实标签生成以及准确率计算等步骤。 ... [详细]
  • 本文详细探讨了BCTF竞赛中窃密木马题目的解题策略,重点分析了该题目在漏洞挖掘与利用方面的技巧。 ... [详细]
  • SQL Server 存储过程实践任务(第二部分)
    本文档详细介绍了三个SQL Server存储过程的创建与使用方法,包括统计特定类型客房的入住人数、根据房间号查询客房详情以及删除特定类型的客房记录。 ... [详细]
  • 材料光学属性集
    材料光学属性集概述了材料在不同光谱下的光学行为,包括可见光透射率、太阳光透射率等关键参数。 ... [详细]
  • 题目编号:2049 [SDOI2008]Cave Exploration。题目描述了一种动态图操作场景,涉及三种基本操作:断开两个节点间的连接(destroy(a,b))、建立两个节点间的连接(connect(a,b))以及查询两节点是否连通(query(a,b))。所有操作均确保图中无环存在。 ... [详细]
  • 嵌套列表的扁平化处理
    本文介绍了一种方法,用于遍历嵌套列表中的每个元素。如果元素是整数,则将其添加到结果数组中;如果元素是一个列表,则递归地遍历这个列表。此方法特别适用于处理复杂数据结构中的嵌套列表。 ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • 1#include2#defineM1000103#defineRGregister4#defineinf0x3f3f3f3f5usingnamespacestd;6boolrev ... [详细]
  • 在编程实践中,正确管理和释放资源是非常重要的。本文将探讨 Python 中的 'with' 关键字及其背后的上下文管理器机制,以及它们如何帮助我们更安全、高效地管理资源。 ... [详细]
  • 本文提供了《汇编语言 第3版》中检测点11.2的详细参考答案,包括了各指令执行后的状态标志分析。 ... [详细]
  • 使用Echarts for Weixin 小程序实现中国地图及区域点击事件
    本文介绍了如何使用Echarts for Weixin在微信小程序中构建中国地图,并实现区域点击事件。包括效果展示、条件准备和逻辑实现的具体步骤。 ... [详细]
  • 本文介绍了一个使用mii-tool工具检查网络接口状态的Bash脚本,并将结果记录到日志文件中。 ... [详细]
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社区 版权所有