Touchlib源码诠释

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 
                } 
            } 
        } 
    }