• 白鹭引擎


    1, 矩形碰撞检测

    class Main extends egret.DisplayObjectContainer {
    
        /**
         * Main 类构造器, 初始化的时候自动执行, ( 子类的构造函数必须调用父类的构造函数 super )
         * constructor 是类的构造函数, 类在实例化的时候调用
         * egret.Event.ADDED_TO_STAGE, 在将显示对象添加到舞台显示列表时调度
         */
        public constructor() {
            super();
            this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);
        }
    
        /**
         * 显示对象.hitTestPoint(x, y) 用于判断矩形与某个点是否发生碰撞
         * 以下为检测左右晃动的矩形是否与 点 300, 100 发生碰撞 (相交)
         */
        private onAddToStage(event: egret.Event) {
            var isHit:boolean = false;
            var infoText:egret.TextField = new egret.TextField();
            infoText.y = 200;
            infoText.text = "isHit: " + isHit;
            this.addChild(infoText);
    
            var shp:egret.Shape = new egret.Shape();
            shp.graphics.beginFill( 0xff0000 );
            shp.graphics.drawRect( 0,0,100,100);
            shp.graphics.endFill();
            this.addChild(shp);
    
            var append = 10;
            egret.startTick(function():boolean {
                shp.x += append;
                if (shp.x == 540) {
                    append = -10;
                } else if (shp.x == 0) {
                    append = 10;
                }
                isHit = shp.hitTestPoint(300, 100);
                infoText.text = "isHit: " + isHit;
                return true;
            }, this);
        }
    }

    2, 像素碰撞检测

    class Main extends egret.DisplayObjectContainer {
    
        /**
         * Main 类构造器, 初始化的时候自动执行, ( 子类的构造函数必须调用父类的构造函数 super )
         * constructor 是类的构造函数, 类在实例化的时候调用
         * egret.Event.ADDED_TO_STAGE, 在将显示对象添加到舞台显示列表时调度
         */
        public constructor() {
            super();
            this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);
        }
    
        /**
         * 显示对象.hitTestPoint(x, y, 是否使用像素检测) 用于像素碰撞检测
         * 与矩形碰撞检测相比, 像素碰撞检测只会检测显示对象显示部分与这个点是否碰撞
         * 而矩形碰撞检测是检测显示对象的包围圈是否和这个点碰撞, 像素碰撞检测消耗性能大
         * 如下绘制两个圆, 依次和他们的最小包围矩形的右下角的坐标做碰撞检测
         * 最小包围矩形 => 水平的能将整个图案包括在内的矩形
         * 可以发现, 矩形碰撞检测, 碰撞点只要在显示的对象的最小包围矩形内, 就返回 true
         * 而像素碰撞检测, 碰撞点只有在园内的, 即显示区域内, 才返回 true
         */
        private onAddToStage(event: egret.Event) {
            var shp1:egret.Shape = new egret.Shape();
            shp1.graphics.beginFill( 0xff0000 );
            shp1.graphics.drawCircle( 50,50,50);
            shp1.graphics.endFill();
            this.addChild(shp1);
    
            var shp2:egret.Shape = new egret.Shape();
            shp2.graphics.beginFill( 0xff0000 );
            shp2.graphics.drawCircle( 50,450,50);
            shp2.graphics.endFill();
            this.addChild(shp2);
    
            var isHit0:boolean = shp1.hitTestPoint(100, 100);
            var isHit1:boolean = shp2.hitTestPoint(100, 500, true);
    
            var infoText:egret.TextField = new egret.TextField();
            infoText.y = 200;
            infoText.text = "isHit0: " + isHit0 + ", isHit1: " + isHit1;
            this.addChild(infoText);
        }
    }
  • 相关阅读:
    吴裕雄 19-Mysql 连接的使用
    吴裕雄 18-MySQL GROUP BY 语句
    吴裕雄 17-MySQL 排序
    吴裕雄 16-MySQL UNION 操作符
    吴裕雄 15-MySQL LIKE 子句
    吴裕雄 14-MySQL DELETE 语句
    吴裕雄 13-MySQL UPDATE 查询
    【2017中国大学生程序设计竞赛
    【2017中国大学生程序设计竞赛
    【AtCoder Regular Contest 082 F】Sandglass
  • 原文地址:https://www.cnblogs.com/lovling/p/8403837.html
Copyright © 2020-2023  润新知