链条处理

package framework.utilt
{
    import flash.display.DisplayObject;
    import flash.geom.Point;
    import flash.net.LocalConnection;
    import flash.system.System;

    public class Utilts
    {
        /**
         * AS3冒泡排序算法
         * @param arr 需要排序的数组
         * @param isAsc 是否升序
         * @return 返回排序后的数组
         */
        public static function BubbleSort(arr:Array, isAsc:Boolean = true):Array
        {
            if(arr == null)
            {
                throw new Error("Array is null.");
            }
            var tmp:*;
            if(isAsc)
            {
                for(var i:int = 0; i < arr.length; i++)
                {
                    for(var j:int = i; j < arr.length; j++)
                    {
                        if(arr[i] > arr[j])
                        {
                            tmp = arr[i];
                            arr[i] = arr[j];
                            arr[j] = tmp;
                        }
                    }
                }
            }
            else
            {
                for(i = 0; i < arr.length; i++)
                {
                    for(j = i; j < arr.length; j++)
                    {
                        if(arr[i] < arr[j])
                        {
                            tmp = arr[i];
                            arr[i] = arr[j];
                            arr[j] = tmp;
                        }
                    }
                }
            }
            return arr;
        }

        /**
         *flash gc
         */
        public static function GC():void{
            trace(System.totalMemory/1024,"gc");
            try {
                new LocalConnection().connect(‘foo‘);
                new LocalConnection().connect(‘foo‘);
            } catch (e:*) {}
            //    强制执行垃圾回收进程。
            //        仅限于 Flash Player 调试版和 AIR 应用程序。在 AIR 应用程序中,System.gc() 方法仅限在运行于
            //        AIR Debug Launcher (ADL) 中的内容或已安装的应用程序的应用程序安全沙箱中的内容中启用。
            //System.gc();//Debug版本有效
        }

        private static function getRotation(p1:Point,p2:Point):Number
        {
            var r:Number=Math.PI/2;
            if(p1.x!=p2.x)
            {
                r=Math.atan((p1.y-p2.y)/(p1.x-p2.x));
            }
            return r;
        }

        private static function radianToAngle(radian:Number):Number
        {
            return radian*(180/Math.PI);
        }

        /**
         * @param _st
         * @param _end
         * @return
         */
        public static function GetRotation(_st:Point,_end:Point):Number
        {
            var angle:Number = getRotation(_st,_end);
            var last:Number = radianToAngle(angle);
            if(_end.x - _st.x < 0)
            {
                last -= 180;
            }
            return last;
        }

        /**
         *生成角度,长度
         * @param list
         * @return
         *
         */
        public static function GetLink(list:Array):Array
        {
            if(!list || list.length < 2)
            {
                throw new Error("LinkMC error!");
            }
            var res:Array = [];
            var len:int = list.length;
            for(var i:int = 0;i < len - 1;i++)
            {
                var s:Point = list[i];
                var e:Point = list[i+1];

                var angle:Number =    GetRotation(s,e);
                var dis:Number =  Point.distance(s,e);

                var o:Object = new Object();
                o.ang = angle;
                o.d = dis;
                o.x = s.x;
                o.y = s.y;
                res[i] = o;
            }
            return res;
        }
    }
}
package
{
    import flash.display.Bitmap;
    import flash.display.DisplayObject;
    import flash.display.Graphics;
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    import flash.utils.getDefinitionByName;

    import framework.baseUI.JButton;
    import framework.ini.SignIni;
    import framework.loader.ElementLoader;
    import framework.utilt.Utilts;

    public class Test0 extends Sprite
    {
//        private var bmp:Bitmap;

        private var _bg:Sprite;
        private var list:Array;
        private var _class:Class;

        public function Test0()
        {
            list=[];

            var btn:JButton = new JButton(onBtnMouseEvt,"build","build",true);
            addChild(btn);

            var clearbtn:JButton = new JButton(onBtnMouseEvt,"clear","clear",true);
            clearbtn.y = 50;
            addChild(clearbtn);

//            graphics.beginFill(0xff0000,0.1);
//            graphics.drawRect(0,0,800,600);
//            graphics.endFill();

            _bg = new Sprite();
            _bg.x = 100;
            _bg.graphics.beginFill(0xff0000,0.1);
            _bg.graphics.drawRect(0,0,800,600);
            _bg.graphics.endFill();
            _bg.addEventListener(MouseEvent.CLICK,onMouseEvt);
            addChild(_bg);

            ElementLoader.instance.load("0.swf",SignIni.TYPE_SWF,onComplete);
        }

        private function onBtnMouseEvt(e:MouseEvent):void
        {
            if((e.target as JButton).name == "build")
            {
                var arr:Array =    Utilts.GetLink(list);
                for(var i:int = 0;i < arr.length;i++)
                {
                    var o:Object = arr[i];
                    addArrow(o.ang,o.d,o.x,o.y);
                }
            }
            else
            {

            }
        }

        private function addArrow(ang:Number,dis:Number,x:Number,y:Number):void
        {
//            var mc:MovieClip = new _class() as MovieClip;

            var mc:Sprite = new Sprite();
            mc.graphics.beginFill(0xffff00,0.5);
            mc.graphics.drawRect(0,0,dis,20);
            mc.mouseEnabled = false;
            mc.rotation = ang;
//            mc.width = dis;
            mc.x = x;
            mc.y = y;
            _bg.addChild(mc);
        }

        private function onMouseEvt(e:MouseEvent):void
        {
//            trace(e.localX );
            var _x:Number = e.localX
            var _y:Number = e.localY;

            var g:Graphics =    _bg.graphics;
            g.beginFill(0xff0000);
            g.drawCircle(_x,_y,2);
            g.endFill();

            list.push(new Point(_x,_y));
        }

        private function onComplete(dis:DisplayObject):void
        {
//            bmp = dis as Bitmap;
//            addChild(bmp);
            var c:Class = getDefinitionByName("com.arrow") as Class;
//            var mc:MovieClip = new c() as MovieClip;
//            mc.mouseEnabled = false;
//            mc.width = 600;
//            addChild(mc);

            _class = c;
        }
    }
}
import flash.display.Shape;

class Cir extends Shape
{
    public function Cir()
    {
        graphics.beginFill(0xff0000);
        graphics.drawCircle(0,0,5);
        graphics.endFill();
    }
}
时间: 2024-10-10 01:59:26

链条处理的相关文章

iOS中的事件传递和响应者链条

iOS中的事件传递和响应者链条 本文转自:http://www.linuxidc.com/Linux/2015-08/121270.htm 首先我们来看看ios中事件的产生和传递过程 1.发生触摸事件后,系统会将事件加入到一个由UIApplication管理的队列事件中来 2.UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常会发发送事件给应用程序的主窗口 3.主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件 4.找到合适的视图控件后,就会调用视图

响应者链条

响应时间的完整处理过程: 1.先讲事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件 2.调用最合适控件的touches....方法 3.如果调用了[super touches...];就会将事件顺着响应者链条往上传递,传递给上一个响应者 4.接着就会调用上一个响应者touches...方法 什么事响应者链条? 1.响应者链条是由多个响应者对象链接起来的链条(什么是响应者对象:能处理事件的对象) 2.利用响应者链条,能让多个控件处理同一个触摸事件 3.怎么利用链条往上传

简析响应者链条

谈到响应者链条,首先要有触摸事件和响应者.触摸事件就不解释了,那么什么是响应者? 一.响应者 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象”.例如:UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件. 二.事件的传递 有了触摸事件和响应者,就会产生响应者链条.发生触摸事件后,系统会将该事件加入到一个由UIApplication

iOS-响应者链条

一.响应者链条的事件响应过程: 1.模拟视图view上按钮button被点击的事件响应: 二.hitTest方法的递归调用 1.-(UIView*)hitTest:(CGPoint) withEvent:(UIEvent*)event; 这个方法是系统底层专门用来递归遍历是哪一个视图应对事件做出响应的方法,在UIView里面定义, 如果在视图里面还存在子视图,就会一级一级的递归调用这个方法: point这个参数是指事件操作在这个视图的坐标,是用来判断事件操作是否在这个视图的有效范围, 如果是在这

事件处理以及响应者链条

在ios中,事件UIEvent类来表示,当一个事件发生时,系统会搜集的相关事件信息,创建一个UIEvent对象,最后将该事件转发给应用程序对象(UIApplication).日常生活中,主要有三种类型的事件:触摸事件,加速计事件以及远程遥控事件.下面是官方的一张图片: 当用户通过以上方式触发一个事件时,会将相应的事件对象添加到UIApplication的事件队列中.UIApplication会循环的从队列中拿出第一个事件来处理.首先将该事件分发给UIApplication 的主窗口对象(KeyW

响应者链条(事件的传递)(复习笔记)

1.如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件. 2.在以下几种情况下,控件是不能接收触摸事件 1.不接收用户交换  userInteractionEnable= NO; 2.隐藏 hiden = YES; 3.透明 alpha = 0.0 ~ 0.01; 提示:UIImageView的userInteractionEnable默认为NO,因此UIImageView以及他的子控件默认不接收触摸事件. 3.事件的完整处理过程 1.先将事件对象由上往下传递(由父控件传递给子控件),

事件的传递及相应者链条

除去高大上的标题,本文主要就是讲当你触碰手机屏幕上任意点的时候,系统是怎样找到那个需要响应该触碰事件的控件,以及该控件对触碰事件的响应情况 首先是 找到应该响应该触碰事件控件的过程:触摸事件首先是被应用的消息循环机制检测到,加入到消息队列,到处理该消息时,由application向下问window,window又去问rootcontroller(这个触摸点在没在你的view范围中),rootcontroller又问自己的view,view又向下问自己的所有子控件,进行筛选, 筛选的规则是: 1.

UI进阶--响应者链条

响应者:继承了UIResponder的对象就是响应者 响应者链条:1.由多个响应者对象连接起来的链条叫做响应者链条2.什么是上一个响应者?  2.1.如果当前这个view是控制器的view,控制器就是上一个响应者  2.2.如果当前这个view不是控制器的view,那么父控件就是上一个响应者3.利用响应者链条可以让多个控件处理同一个 "触摸事件"  3.1.在最后适合的控件里调用super的touchesBegan方法,这样就将事件传给上一个响应,上一个响应者也可以处理事件了 响应者链

ios响应者链条

一次完整的触摸事件的传递响应的过程 UIAppliction --> UIWiondw -->递归找到最适合处理事件的控件 控件调用touches方法-->判断是否实现touches方法-->没有实现默认会将事件传递给上一个响应者-->找到上一个响应者 1.响应者链条: 由很多响应者链接在一起组合起来的一个链条称之为响应者链条 什么是响应者:继承UIResponder的对象称之为响应者对象 2.默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者进行处理 如何判断当

ios中的事件处理、响应者链条以及第一响应者

在ios中,事件UIEvent类来表示,当一个事件发生时,系统会搜集的相关事件信息,创建一个UIEvent对象,最后将该事件转发给应用程序对象(UIApplication).日常生活中,主要有三种类型的事件:触摸事件,加速计事件以及远程遥控事件.下面是官方的一张图片: 当用户通过以上方式触发一个事件时,会将相应的事件对象添加到UIApplication的事件队列中.UIApplication会循环的从队列中拿出第一个事件来处理.首先将该事件分发给UIApplication 的主窗口对象(KeyW