`

Touchlib源码注释

阅读更多
Touchlib源码注释-----TUIOObject.as TUIOEvent.as TUIOCursor.as
分类: Flex/Flash/AS3 OpenSource 2010-01-05 11:31 1113人阅读 评论(2) 收藏 举报
声明:欢迎任何人和组织转载本blog中文章,但必须标记文章原始链接和作者信息。 
本文链接:http://blog.csdn.net/li_007/archive/2010/01/05/5134270.aspx
开拓进取的小乌龟------->CSDN点滴点点滴滴Blog
还是继续把剩余的整理贴出来。欢迎大家指正。
TUIO.as文件详细注释
TUIOObject.as文件详细注释
TUIOEvent.as文件详细注释
TUIOCursor.as文件详细注释
TUIOObject.as文件
view plainprint?
package com.touchlib { 
 
    import flash.display.Sprite; 
    import flash.display.DisplayObject;  
    //import flash.display.InteractiveObject;    
    //import flash.display.MovieClip;    
    import flash.geom.Point; 
    //import flash.utils.Timer; 
    //import flash.events.MouseEvent; 
    //import flash.events.Event; 
     
    // 
    // 定义一个触摸点类,其实在这个类里面注意一下传进来的参数o 
    // 它是这个类的一个关键,也是整个lib的一个关键,由它来dispatcher 
    // 所有的touch事件,当然也是它来响应touch事件 
    //  
    public class TUIOObject  
    { 
        public var x:Number; 
        public var y:Number; 
         
        public var oldX:Number; 
        public var oldY:Number; 
         
        public var dX:Number; 
        public var dY:Number;                
         
        public var area:Number; 
         
        public var TUIOClass:String;        // cur or Obj..  
        public var sID:int; 
        public var ID:int; 
        public var angle:Number;         
        public var pressure:Number; 
         
        private var isNew:Boolean; 
        public var isAlive:Boolean;      
        public var obj; 
        public var spr:Sprite; 
        public var trlx:Sprite; 
         
        public var color:int; 
         
        var aListeners:Array; 
 
        public function TUIOObject (cls:String, id:int, px:Number, py:Number, dx:Number, dy:Number, sid:int = -1, ang:Number = 0, o = null) 
        { 
            aListeners = new Array(); 
            TUIOClass = cls; 
            ID = id; 
            x = px; 
            y = py; 
            oldX = px; 
            oldY = py; 
            dX = dx; 
            dY = dy; 
            sID = sid; 
            angle = ang; 
            isAlive = true; 
             
            var c = int(Math.random() * 4); 
             
            if(c == 0) 
                color = 0xff0000; 
            else if(c == 1) 
                color = 0x00ffff; 
            else if(c == 2) 
                color = 0x00ff00;                
            else if(c == 3) 
                color = 0x0000ff;        
             
            // 创建调试的光标,当debugMode为true事,绘制一个粉红色的圆 
            spr = new TUIOCursor(ID.toString());             
            spr.x = x; 
            spr.y = y;           
             
            try { 
                obj = o; 
            } catch (e) 
            { 
                obj = null; 
            } 
             
            //trace("Start " + ID + ", " + sID + " (" + int(px) + "," + int(py) + ")"); 
             
 
             
            isNew = true; 
        } 
         
        // 
        // 当第一次创建一个TUIOObject对象时,需要发送TUIO_DOWN和TUIO_OVER事件 
        // 
        public function notifyCreated() 
        { 
            if(obj) 
            { 
                try 
                { 
                    // 将对象舞台坐标转化为显示对象坐标 
                    var localPoint:Point = obj.parent.globalToLocal(new Point(x, y));                
                    //trace("Down : " + localPoint.x + "," + localPoint.y); 
                     
                    // 分别dispatcher TUIO_OVER和TUIO_DOWN事件 
                    obj.dispatchEvent(new TUIOEvent(TUIOEvent.TUIO_OVER, true, false, x, y, localPoint.x, localPoint.y, 0, 0, obj, false,false,false, true, 0, TUIOClass, ID, sID, angle));                                                  
                    obj.dispatchEvent(new TUIOEvent(TUIOEvent.TUIO_DOWN, true, false, x, y, localPoint.x, localPoint.y, 0, 0, obj, false,false,false, true, 0, TUIOClass, ID, sID, angle));                                  
                } catch (e) 
                { 
                        trace("Failed : " + e); 
//                  trace(obj.name); 
                    obj = null; 
                } 
            }            
        } 
         
        // 调用这个函数,说明在TUIOObject数组中存在当前点,也即是当前点移动了。 
        public function setObjOver(o:DisplayObject) 
        { 
            try { 
                 
                if(obj == null) 
                { 
                    obj = o;                 
                    if(obj)  
                    { 
                        // 当已存在TUIOObject对象,而obj对象为空时,需要将当前对象传递进来的显示对象 
                        //(也即是当前点下面最上层显示对象,是事件的发送者,事件也是产生于它),故需要 
                        // 赋值给obj对象,并dispatcher TUIO_OVER事件 
                        var localPoint:Point = obj.parent.globalToLocal(new Point(x, y));                
                        obj.dispatchEvent(new TUIOEvent(TUIOEvent.TUIO_OVER, true, false, x, y, localPoint.x, localPoint.y, 0, 0, obj, false,false,false, true, 0, TUIOClass, ID, sID, angle));                  
                    } 
                }  
                else if(obj != o)  
                { 
                    // 当已存在TUIOObject对象,而obj对象与传递进来的显示对象不一致,说明当前点移动了,并且移出了 
                    // 原来的obj对象的显示范围,故需要对原来对象dispatcher TUIO_OUT事件 
                    var localPoint:Point = obj.parent.globalToLocal(new Point(x, y));                                
                    obj.dispatchEvent(new TUIOEvent(TUIOEvent.TUIO_OUT, true, false, x, y, localPoint.x, localPoint.y, 0, 0, obj, false,false,false, true, 0, TUIOClass, ID, sID, angle)); 
                     
                    if(o) 
                    { 
                        // 当已存在TUIOObject对象,而obj对象与传递进来的显示对象不一致,并且传递进来的也是非空显示对象, 
                        // 说明当前点移动了,并且移出了原来的obj对象的显示范围,故需要对当前对象dispatcher TUIO_OVER事件 
                        localPoint = obj.parent.globalToLocal(new Point(x, y)); 
                        o.dispatchEvent(new TUIOEvent(TUIOEvent.TUIO_OVER, true, false, x, y, localPoint.x, localPoint.y, 0, 0, obj, false,false,false, true, 0, TUIOClass, ID, sID, angle)); 
                    } 
                    obj = o;                                 
                } 
            } catch (e) 
            { 
//              trace("ERROR " + e); 
            } 
        } 
         
        // 将所有需要dispatcher的TUIOObject对象添加到数值中 
        public function addListener(reciever:Object) 
        { 
            aListeners.push(reciever); 
        } 
         
        // 从数组中删除非alive状态的TUIOObject对象 
        public function removeListener(reciever:Object) 
        { 
            for(var i:int = 0; i<aListeners.length; i++) 
            { 
                if(aListeners[i] == reciever) 
                    aListeners.splice(i, 1); 
            } 
        }        
         
        public function kill() 
        { 
            //trace("Die " + ID);            
            var localPoint:Point; 
             
            if(obj && obj.parent) 
            {    
                // 将当前TUIOObject对象中的显示对象清除,并让当前点dispatcher TUIO_OUT和TUIO_UP事件 
                localPoint = obj.parent.globalToLocal(new Point(x, y));              
                obj.dispatchEvent(new TUIOEvent(TUIOEvent.TUIO_OUT, true, false, x, y, localPoint.x, localPoint.y, 0, 0, obj, false,false,false, true, 0, TUIOClass, ID, sID, angle));               
                obj.dispatchEvent(new TUIOEvent(TUIOEvent.TUIO_UP, true, false, x, y, localPoint.x, localPoint.y, 0, 0, obj, false,false,false, true, 0, TUIOClass, ID, sID, angle));                                    
            }            
            obj = null; 
             
            // 为什么要所有都TUIO_UP有点不理解 
            for(var i:int=0; i<aListeners.length; i++) 
            { 
                localPoint = aListeners[i].parent.globalToLocal(new Point(x, y));                
                aListeners[i].dispatchEvent(new TUIOEvent(TUIOEvent.TUIO_UP, true, false, x, y, localPoint.x, localPoint.y, 0, 0, aListeners[i], false,false,false, true, 0, TUIOClass, ID, sID, angle));                                
            } 
        } 
         
        // 这个有点不理解 
        public function notifyMoved() 
        { 
            var localPoint:Point; 
            for(var i:int=0; i<aListeners.length; i++) 
            { 
                //trace("Notify moved"); 
                localPoint = aListeners[i].parent.globalToLocal(new Point(x, y));                
                aListeners[i].dispatchEvent(new TUIOEvent(TUIOEvent.TUIO_MOVE, true, false, x, y, localPoint.x, localPoint.y, 0, 0, aListeners[i], false,false,false, true, 0, TUIOClass, ID, sID, angle));                              
            }            
        } 
    } 



TUIOEvent.as文件
view plainprint?
package com.touchlib { 
import flash.display.DisplayObject; 
import flash.display.DisplayObjectContainer; 
import flash.events.Event;   
     
    public class TUIOEvent extends Event 
    { 
        public var TUIOClass:String; 
        public var sID:int; 
        public var ID:int; 
        public var angle:Number; 
        public var stageX:Number; 
        public var stageY:Number; 
        public var localX:Number; 
        public var localY:Number; 
        public var oldX:Number; 
        public var oldY:Number; 
        public var buttonDown:Boolean; 
        public var relatedObject:DisplayObject; 
 
        public static const TUIO_MOVE:String = "com.touchlib.TUIOEvent.TUIO_MOVE"; 
        public static const TUIO_DOWN:String = "com.touchlib.TUIOEvent.TUIO_DOWN";               
        public static const TUIO_CLICK:String = "com.nui.TUIOEvent.TUIO_CLICK"; //double tap-click 
        public static const TUIO_UP:String = "com.touchlib.TUIOEvent.TUIO_UP";               
        public static const TUIO_OVER:String = "com.touchlib.TUIOEvent.TUIO_OVER";                       
        public static const TUIO_OUT:String = "com.touchlib.TUIOEvent.TUIO_OUT";         
         
        // 根据Actionscript 3的继承机制,编写自己的事件类 
        public function TUIOEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, stageX:Number = 0, stageY:Number = 0, localX:Number = 0, localY:Number = 0, oldX:Number = 0, oldY:Number = 0, relatedObject:DisplayObject = null, ctrlKey:Boolean = false, altKey:Boolean = false, shiftKey:Boolean = false, buttonDown:Boolean = false, delta:int = 0, TUIOClass:String = "2Dcur", ID:int = -1, sID:int = -1, angle:Number = 0.0) 
        { 
            this.TUIOClass = TUIOClass; 
            this.sID = sID; 
            this.ID = ID; 
            this.angle = angle; 
            this.stageX = stageX; 
            this.stageY = stageY; 
            this.localX = localX; 
            this.localY = localY;            
            this.oldX = oldX; 
            this.oldY = oldY; 
            this.buttonDown = buttonDown; 
            this.relatedObject = relatedObject; 
             
            super(type, bubbles, cancelable); 
             
//          super(type, bubbles, cancelable, localX, localY, relatedObject, ctrlKey, altKey, shiftKey, buttonDown, delta); 
             
        } 
 
    } 


TUIOCursor.as文件
view plainprint?
package com.touchlib 

    import flash.display.Sprite; 
    import flash.text.TextFormat; 
    import flash.text.TextField; 
    import flash.text.TextFieldAutoSize; 
 
    // 此类的作用是在调试状态下,绘制一个粉红色的圆来表示当前触摸点 
    public class TUIOCursor extends Sprite 
    { 
        // 声明一个动态文本用来显示当前触摸点的id 
        private var DEBUG_TEXT:TextField;    
         
        public function TUIOCursor(debugText:String) 
        { 
            super(); 
             
            if (TUIO.debugMode) 
            { 
                // Draw us the lil' circle 
                graphics.beginFill(0xFF00FF , 1);    
                graphics.drawCircle(-5 , -5, 10); 
                graphics.endFill(); 
                 
                // Add textfield for debugging, shows the cursor id 
                if (debugText != '' || debugText != null) 
                { 
                    var format:TextFormat = new TextFormat(); 
                    DEBUG_TEXT = new TextField(); 
                    format.font = 'Verdana'; 
                    format.color = 0xFFFFFF; 
                    format.size = 10; 
                    DEBUG_TEXT.defaultTextFormat = format; 
                    DEBUG_TEXT.autoSize = TextFieldAutoSize.LEFT; 
                    DEBUG_TEXT.background = true;    
                    DEBUG_TEXT.backgroundColor = 0x000000;   
                    DEBUG_TEXT.border = true;    
                    DEBUG_TEXT.text = ''; 
                    DEBUG_TEXT.appendText(' '+debugText+'  '); 
                     
                    DEBUG_TEXT.x = 8; 
                    DEBUG_TEXT.y = -13;   
                     
                    addChild(DEBUG_TEXT); 
                } 
                else 
                { 
                // hide cursor 
                } 
            } 
        } 
    } 
分享到:
评论

相关推荐

    touchlib 完整源代码

    Touchlib是一个库,用于创建多点接触交互界面。它能处理红外线的tracking blobs,并向你的程序发送多点触摸事件,如手指按下、手指移动和手指释放等。它包含一个配置程序和少量让你入门的实例,能和大部分类型的网络...

    touchlib创建多点接触交互界面

    Touchlib是一个库,用于创建多点接触交互界面。它能处理红外线的tracking blobs,并向你的程序发送多点触摸事件,如手指按下、手指移动和手指释放等。它包含一个配置程序和少量让你入门的实例,能和大部分类型的网络...

    FLASH多点触摸开发包

    "FLASH多点触摸开发包",如描述中提到的"touchlib",就是专门用于在Flash环境中实现多点触摸功能的工具。 首先,让我们深入了解一下多点触摸技术。多点触摸是指系统能够同时识别并处理两个或更多触点的能力,这些...

    多点触摸工具包 MTmini_package_v1

    多点触摸技术是一种先进的输入方式,它允许用户通过同时使用两个或更多个手指与设备进行交互,极大地扩展了人机交互的可能性。"MTmini_package_v1" 是一个专为DIY爱好者设计的多点触摸工具包,旨在帮助用户自行构建...

    flash多点触摸 多媒体制作 flash触摸屏程序

    flash多点触摸 多媒体制作 flash触摸屏程序 进来在研究touchlib,和大家分享一下: 这是一个简单的多点触摸程序,实现对一个...2,touchlib,请参照我的上一篇教程《如何用SVN下载touchlib》 好,准备完毕,开工:

    摄像头多点触控

    这里就要用到一个名为Touchlib的程序,我们可以下载一个名为MTmini Software Package v1的软件包,它里面包含了开源软件Touchlib、设置程序、各种示例程序,以及相应的教程等等。

    TouchLibJS:用于鼠标和触摸的直观且响应Swift的 HTML5 UI 库

    #TouchLib 对象和用法###Vertical Slider (TouchLib.VertSlider) 实例化: var vertSlider = new TouchLib . VertSlider ( { //DOM element in which the slider will be created (required) elementId : '...

    ccv1.5 win安装包

    多点触屏软件CCV,软件使用了opencv和touchlib,封装好了界面,可以矫正网格,发送flash的TUIO消息,很好用。-Multi-touch software CCV, the software uses opencv and touchlib, package good interface, you can ...

    SC95F8X1X触控资料

    《赛元单片机触摸库资料》是一份深入探讨SC95F8X1X系列单片机在触控应用领域的技术文档集合。该资料集主要面向电子工程师、硬件开发者以及对C51编程有一定基础的读者,旨在帮助他们理解和掌握如何在SC95F8X1X芯片上...

    touchliid触摸工具

    该工具包的版本为"touchlib_beta_v1.0",表明这还是一个测试阶段的产品。"beta"通常意味着软件已经具备了基本的功能,但可能还存在一些未发现的bug或者性能优化的空间。用户在使用过程中,需要有一定的技术背景,...

    2021-2022收藏资料关于基于光学感应的大尺寸多点触摸控制技术.doc

    软件层面,多点触摸应用通常基于如Touchlib这样的开源库构建,它能处理红外线信号,实现多点触摸事件的解析和处理,为上层应用程序提供接口,从而实现丰富的交互功能。 总的来说,基于光学感应的大尺寸多点触摸控制...

    WPF仿Windows7界面效果

    虽然WPF原生支持有限的触摸事件,但通过第三方库如TouchLib,可以扩展触控功能,让应用在触摸设备上也能有良好的交互体验。 通过上述技术,开发者可以利用WPF实现一个高度定制的Windows7风格界面,同时保持现代应用...

    自制MulitTouch多点触控

    1. **Touchlib配置**: - 运行`Configuration.bat`脚本启动配置向导。 - 按照提示调整各项参数,直至在`Rectify6`窗口中只出现平滑的手指对应的白点为止。 - 完成配置后退出。 2. **Windows示例程序测试**: - ...

    多点触摸技术手册繁体版

    - **Chris Yanc**:专业互动设计师,专注于使用Flash和ActionScript 3.0结合CCV和Touchlib开发多点触摸应用。 - **Christian Moore**:开源技术先驱,致力于推动艺术形态人类感应技术的标准化。 - **Donovan ...

    IphoneShortcuts.rar_C#编程_C#_

    9. **触摸支持**:虽然WinForms本身不直接支持触摸输入,但可以通过使用Windows Presentation Foundation (WPF)的某些组件或第三方库,如TouchLib,来实现对触摸事件的支持,使得模拟的iPhone界面更加真实。...

Global site tag (gtag.js) - Google Analytics