wu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  57 随笔 :: 0 文章 :: 0 评论 :: 22597 阅读

2013年5月25日

AS3.0 增加了对鼠标事件DOUBLE_CLICK的支持,AS3对事件的触发流程为 down,up,click,down,up,doubleclick.
这带来一个问题:如果我对显示对象同时增加了down,up,click,doubleclick事件,如果双击一次,会依次触发down,up,click,down,up,click,doubleclick这6个事件。这并不是我期望的结果。(当我们期望一个显示对象可以有单击,双击,拖拽时就会遇到该问题)

参考网上的一些解决方法,然后优化了一下,做成一个示例如下,备用。基本的解决思路就是不使用原生的click和doubleclick事件,仅仅使用down和up事件,在这两个事件里根据触发事件的时间差值来判断单击,双击和拖拽。


package {
    import com.greensock.TweenLite;
    
    import flash.display.DisplayObjectContainer;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.utils.getTimer;
    
    public class test extends Sprite {
        private var _rect:Sprite;
        
        public function test() {
            trace("hello world");
            
//            this.stage.addEventListener(MouseEvent.CLICK, __onTraceClick);
            
            drawRect();
            _rect.addEventListener(MouseEvent.ROLL_OVER, __onOver);
            _rect.addEventListener(MouseEvent.ROLL_OUT, __onOut);
            _rect.addEventListener(MouseEvent.MOUSE_DOWN, __onDown);
            
        }
        
        
        private function __onOver(evt:MouseEvent):void {
            //trace("over");
        }
        private function __onOut(evt:MouseEvent):void {
            //trace("out");
        }
        
        private var _preDownTime:int = 0;
        private function __onDown(evt:MouseEvent):void {
            trace("down");
            
            TweenLite.killDelayedCallsTo(doClick);
            
            _rect.addEventListener(MouseEvent.MOUSE_UP, __onUp);
            _rect.startDrag();
            
            _preDownTime = getTimer();
        }
        
        
        private const UP_INTER:int = 300;
        private var _preUpTime:int = 0;
        private function __onUp(evt:MouseEvent):void {
            trace("up");
            _rect.removeEventListener(MouseEvent.MOUSE_UP, __onUp);
            _rect.stopDrag();
            
            var now:int = getTimer();
            if((now - _preUpTime) < UP_INTER) {
                trace("----double click");
            } else if((now - _preDownTime) < UP_INTER) {
                TweenLite.delayedCall(0.2, doClick);
            } else {
                trace("drag");
            }
            _preUpTime = now;
        }
        
        private function doClick():void {
            trace("----click");
        }
        
        private function __onTraceClick(evt:MouseEvent):void {
            var str:String = "";
            trace(printTrace(evt.target as DisplayObjectContainer));
        }
        
        private function printTrace(sp:DisplayObjectContainer):String {
            if(null == sp) {
                return "";
            } else {
                
                return sp.toString() + "/" + printTrace(sp.parent);
            }
        }
        private function drawRect():void {
            var rect:Sprite = new Sprite();
            
            // red rect, starting at point 50, 50
            rect.graphics.beginFill(0xFF0000);
            rect.graphics.moveTo(50, 50);
            rect.graphics.lineTo(150,50);
            rect.graphics.lineTo(150,150);
            rect.graphics.lineTo(50,150);
            rect.graphics.endFill();
            _rect = rect;
            this.addChild(_rect);
        }
        
        
        
    }
}


posted @ 2013-05-25 16:49 butterflydog 阅读(788) 评论(0) 推荐(0)

2013年5月5日

摘要: 各种算法和数据结构的大O复杂度http://bigocheatsheet.com/ 阅读全文
posted @ 2013-05-05 15:34 butterflydog 阅读(318) 评论(0) 推荐(0)

2013年4月4日

摘要: 拿iPhone看随时随地看电影美剧十分方便,无奈mkv格式视频总是没有声音。google一下才知,视频中的ac3格式的音频由于版权问题,大部分免费的播放器都被不支持,以前QQ影音支持,后来的版本更新中去掉了。越狱或转码或购买支持解码的视频播放器(如AVPlayer)才能播放,了解了一番,根据论坛朋友提示,发现一种叫方便快捷的方法:由于mkv文件是多媒体封装格式,也称多媒体容器,可将其中的音频与视频提取出来,将音频转码为普通格式(如mp3),再对音视频进行混流,生成新的mkv文件。相比直接转码视频,这种方法更为快速。主要用到工具软件: mkvtoolnix (http://www.bunkus. 阅读全文
posted @ 2013-04-04 17:16 butterflydog 阅读(700) 评论(0) 推荐(0)

2012年9月15日

摘要: C语言的谜题来自酷壳http://coolshell.cn/articles/945.html 阅读全文
posted @ 2012-09-15 22:33 butterflydog 阅读(135) 评论(0) 推荐(0)

2012年5月19日

摘要: 学习Tips: http://blog.codingnow.com/cloud/LuaTipsLua提供的机制是C所不擅长的,比如:高级语言、动态结构、简洁、易于测试和调试等。正因为如此,Lua 具有良好的安全保证,自动内存管理,简便的字符串处理功能及其他动态数据的改变。通常情况下,组件(或对象)表现为具体在程序开发过程中很少变化的、占用大量 CPU时间的决定性的程序,例如窗口部件和数据结构。对那种在产品的生命周期内变化比较多的应用方向使用Lua 可以更方便的适应变化。Chunk是Lua执行的每一块语句。注释:-- 多行注释: --[[ --]]Numbers表示实数,Lua中没有整数。lua 阅读全文
posted @ 2012-05-19 14:58 butterflydog 阅读(132) 评论(0) 推荐(0)

2012年5月5日

摘要: SHELL是一个工具程序,是用户与内核交互的接口。要清除僵尸进程,必须重启改变文件所有者:chown root filenamebash: declare -x 定义局部变量; declare -a 定义数组;`ls`和$(ls)在bash下同样。整型算术运算 ((n= $j+$k));数值比较的问题: 有2种:1.类似C语言的比较,用(())包含,比如if (( $n < 100 )) 2.用-le来比较,要用[],比如if [ $n -le 100 ], (注意空格的问题)grep 对双引号中的$变量进行展开替换,单引号不展开egrep 扩展了一些正则表达式的元字符(+?等),fgr 阅读全文
posted @ 2012-05-05 13:02 butterflydog 阅读(290) 评论(0) 推荐(0)

2012年4月16日

摘要: (已发内部论坛,重新整理转贴出来)使用Visual Studio或者Source Insight来写后台代码时,必然会遇到代码如何从windows下同步到Linux开发机中进行编译的问题。常用方法有两种,一种是在Linux下配置Samba;另一种是使用Rsync来同步。Samba毕竟是映射的网络硬盘,读写速度自然没有本机快,我个人不太喜欢直接用VS在其中工作。在Windows下安装cwRsync客户端后,将Rsync的同步脚本作为一个快捷键,添加到VS的菜单栏中(我用的是Alt+T+U),代码有修改,则能很快的同步到Linux开发机中,不过烦人的是,每次都需输入密码。通过添加ssh密钥,并正确 阅读全文
posted @ 2012-04-16 11:02 butterflydog 阅读(1607) 评论(0) 推荐(1)

2012年3月20日

摘要: 原文地址:http://internet2go.net/news/europe/jd-power-iphone-winds-cust-sat-survey-again-nokia-near-bottom(图片在原文中)市场资讯公司J.D.Power 近日公布了其2012年北美市场手机满意度调查结果,该结果包含智能手机和非智能手机。调查显示,iPhone连续第七次蝉联智能手机类第一名,LG和Sanyo在非智能手机类中分居一二名。HTC在智能手机类名列第二,安卓市场的领军者三星位居第三,但是低于行业平均值。JD Power使用了一系列的标准来衡量满意度,而且这些标准对智能手机和非智能手机稍稍不同。 阅读全文
posted @ 2012-03-20 18:54 butterflydog 阅读(132) 评论(0) 推荐(0)

摘要: 标准的udp客户端开了套接口后,一般使用sendto和recvfrom函数来发数据,实际上,udp发送数据有两种方法供大家选用的:方法一:socket----->sendto()或recvfrom()方法二:socket----->connect()----->send()或recv().(此时sendto,recvfrom仍可用)从定义可以看出,sendto和recvfrom在收发时指定地址,而send和recv则没有,那么他们的地址是在那里指定的呢,答案就在于connect函数。在udp编程中,如果你只往一个地址发送,那么你可以使用send和recv,在使用它们之前用co 阅读全文
posted @ 2012-03-20 18:52 butterflydog 阅读(344) 评论(0) 推荐(0)

2012年3月18日

摘要: (http://www.199it.com/archives/28085.html)英文原文: http://mediatapper.com/infographic-social-media-are-a-must-for-brands/?utm_source=rss&utm_medium=rss&utm_campaign=infographic-social-media-are-a-must-for-brands为什么营销人员青睐于社交媒体。事实上,社交媒体是建立品牌知名度并且同潜在消费者对话的一种简单有效的方式,总之,看看下面的信息图来了解为什么营销人员使用社交媒体,并且每一 阅读全文
posted @ 2012-03-18 12:27 butterflydog 阅读(207) 评论(0) 推荐(0)

点击右上角即可分享
微信分享提示