不同类型刚体接触测试

一个刚体与任意类型的感应刚体接触,preSlove和postSlove将会忽略不执行只执行。测试代码如下:

package{
    import Box2D.Common.Math.b2Vec2;
    import Box2D.Dynamics.b2Body;
    import flash.text.TextField;
    import Box2D.Dynamics.Contacts.b2Contact;
    import Box2D.Collision.b2Manifold;
    import Box2D.Dynamics.b2ContactImpulse;
    import com.bit101.components.TextArea;
    import com.bit101.components.PushButton;
    import flash.events.MouseEvent;

    public class Main extends BaseMain{

        public function Main(){
            super(new b2Vec2(0,0));
        }

        private var _box:b2Body;
        private var _textArea:TextArea;
        private var _clearBtn:PushButton;

        override protected function init():void{
            //static sensor
            createTxt(60,200,"static sensor");
            var staticSensorBox:b2Body=createBox(100,100,60,200);
            staticSensorBox.SetType(b2Body.b2_staticBody);
            staticSensorBox.SetSensor(true);
            staticSensorBox.SetAllowMovement(false);
            staticSensorBox.SetUserData({type:"static sensor"});
            //static
            createTxt(60,400,"static");
            var staticBox:b2Body=createBox(100,100,60,400);
            staticBox.SetType(b2Body.b2_staticBody);
            staticBox.SetAllowMovement(false);
            staticBox.SetUserData({type:"static"});

            //kinematic sensor
            createTxt(300,200,"kinematic sensor");
            var kinematicSensorBox:b2Body=createBox(100,100,300,200);
            kinematicSensorBox.SetType(b2Body.b2_kinematicBody);
            kinematicSensorBox.SetSensor(true);
            kinematicSensorBox.SetAllowMovement(false);
            kinematicSensorBox.SetUserData({type:"kinematic sensor"});
            //kinematic
            createTxt(300,400,"kinematic");
            var kinematicBox:b2Body=createBox(100,100,300,400);
            kinematicBox.SetType(b2Body.b2_kinematicBody);
            kinematicBox.SetAllowMovement(false);
            kinematicBox.SetUserData({type:"kinematic"});

            //dynamic sensor
            createTxt(500,200,"dynamic sensor");
            var dynamicSensorBox:b2Body=createBox(100,100,500,200);
            dynamicSensorBox.SetType(b2Body.b2_dynamicBody);
            dynamicSensorBox.SetSensor(true);
            dynamicSensorBox.SetAllowMovement(false);
            dynamicSensorBox.SetUserData({type:"kinematic sensor"});
            //dynamic
            createTxt(500,400,"dynamic");
            var dynamicBox:b2Body=createBox(100,100,500,400);
            dynamicBox.SetType(b2Body.b2_dynamicBody);
            dynamicBox.SetAllowMovement(false);
            dynamicBox.SetUserData({type:"kinematic"});

            var box:b2Body=createBox(40,40,300,40);
            box.SetContactBeginCallback(contactBegin);
            box.SetPreSolveCallback(preSolve);
            box.SetPostSolveCallback(postSolve);
            box.SetContactEndCallback(contactEnd);
            _box=box;

            _textArea=new TextArea(null,10,10,"");
            addChildAt(_textArea,0);

            _clearBtn=new PushButton(this,220,10,"clear",clearHandler);
            _clearBtn.setSize(50,20);
        }

        private function contactBegin(contact:b2Contact):void{
            contactHandler(contact,"begin");
        }
        private function preSolve(contact:b2Contact,oldManifold:b2Manifold):void{
            contactHandler(contact,"pre");
        }
        private function postSolve(contact:b2Contact,impulse:b2ContactImpulse):void{
            contactHandler(contact,"post");
        }
        private function contactEnd(contact:b2Contact):void{
            contactHandler(contact,"end");
        }

        private function contactHandler(contact:b2Contact,cbType:String):void{
            var b1:b2Body=contact.GetFixtureA().GetBody();
            var b2:b2Body=contact.GetFixtureB().GetBody();
            var ob:b2Body=(b1==_box)?b2:b1;
            var otype:String=ob.GetUserData().type;
            print("bodyType:"+otype, "cbType:"+cbType);
        }

        private function createTxt(x:Number,y:Number,text:String):void{
            var txt:TextField=new TextField();
            txt.htmlText="<font color=‘#ffffff‘ size=‘15‘>"+text+"</font>";
            txt.x=x-txt.textWidth*0.5;
            txt.y=y-txt.textHeight*0.5;
            addChild(txt);
        }

        private function clearHandler(e:MouseEvent):void{
            _textArea.text="";
        }

        private function print(... params):void{
            var text:String="";
            for(var i:int=0; i<params.length; i++) text+=params[i]+" ";

            _textArea.text+=text+"\n";
        }

    };
}

源码下载:https://yunpan.cn/cxx6C2BgWAYqY  访问密码 a205

时间: 2024-12-07 17:52:36

不同类型刚体接触测试的相关文章

bash脚本编程之变量、变量类型、条件测试、算术运算、及特殊变量

一.学习目的 1.了解bash脚本的变量类型及变量的使用 2.了解bash中条件测试的种类及如何在bash中实现条件的判断 3.学会在bash中做算术运算 4.了解特殊变量的使用 二.学习内容 1). ①.bash的变量类型: 环境变量 .本地变量.局部变量.位置变量.特殊变量 环境变量: export VALUENAME = VALUE 作用领域是当前的shell进程及其子进程 本地变量: VALUENAME= VALUE 作用领域为整个bash的进程 局部变量:local VALUENAME

集合的增删改查、集合类型的关系测试

集合类型 如何同时找出买了IPhone7和8的人? 集合的增删改查 1 #创建集合 2 s = {} #字典 3 print(type(s)) #结果为:<class 'dict'> 4 5 s1 = {1,2,3,4,5} #集合 6 print(type(s1)) #结果为:<class 'set'> 7 8 #将列表转化为集合 9 l= [1,2,3,4,5,2,3] 10 print(l) #结果为:[1, 2, 3, 4, 5, 2, 3] 11 print(set(l)

C#中的struct(结构)为值类型,struct类型全接触

众所周知,struct类型和class类型非常相似,尤其是在C++中,class可以办到的事struct几乎都可以实现.在C#中struc类型依然存在,它的用处相对来说已经显得越来越不重要,这里主要讲述一下C#中struct和class的一个最大不同点,在C#中struct是值类型,而class是引用类型. 例: class Program { struct Test { public int a ; } static void Main(string[] args) { Test test1 

支持ipv6类型的ddos测试工具thc-ipv6

官网地址 https://www.thc.org/thc-ipv6/ 下载 wget https://www.thc.org/releases/thc-ipv6-2.7.tar.gz 安装 [[email protected] mysoft]# tar zxvf thc-ipv6-2.7.tar.gz [[email protected] mysoft]# cd thc-ipv6-2.7 [[email protected] thc-ipv6-2.7]# make [[email protect

【Android类型SDK测试(二)】环境基础

(一)语言 Android使用的Java语言,所以要测试Android类型的SDK,Java的基础知识还是需要的. 另外,Android中有NDK类型的编程,需要知道C相关的知识. (二)环境准备 Android开发环境的搭建网上一搜就一大堆,看看就懂.这里我只是列举一下,请读者按需查找. 申明一点,作为Android类型SDK的测试,我们不能仅停留在设备上点击按钮,看看功能和展示,更多的时候,我们需要代码,需要日志,所以 Android开发环境对于我们来说,就是测试环境,必不可少. http:

Asp.net 面向接口可扩展框架之使用“类型转化基础服务”测试四种Mapper(AutoMapper、EmitMapper、NLiteMapper及TinyMapper)

Asp.net 面向接口可扩展框架的“类型转化基础服务”是我认为除了“核心容器”之外最为重要的组成部分 但是前面博文一出,争议很多,为此我再写一篇类型转化基础服务和各种Mapper结合的例子,顺便对各种Mapper做个简单的优缺点对比 我对第三方组件评介有三个标准,一.可用性,二.性能,三.易用性 本例子中四个四种Mapper以前我都没使用过(因为以前我都用自己的Mapper),本次测试可能不准确,错误的地方请大家指正 AutoMapper使用的是4.2.1.0,需要.net4.5支持(我使用N

golang:interface{}类型测试

在golang中空的interface即interface{}可以看作任意类型, 即C中的void *. 对interface{}进行类型测试有2种语法: 1. Comma-ok断言: value, ok = element.(T), 其中T是具体类型. 2. Switch测试: switch element.(type) { case T1: case T2: default: } 其中T1, T2是具体类型. 注意: element.(type)语法不能在switch外的任何逻辑里使用. 在

转:什么样的测试人员是好的测试人员

1 工作积极主动 工作态度如何,是评价一个测试人员最主要的方面,一个高水平的测试人员(指纯技术能力)如果没有一个好的工作态度,在测试团队中有时候不但不能对测试工作起到推动作用,有时候还起到阻碍作用,而一个愿意工作的测试人员,哪怕他的技术水平不高,人也不聪明,但对自己的工作认真负责,你告诉他的事情,他都可以认真去做,这个测试人员也会对测试工作起到很大的促进作用.这也是为什么很多企业愿意让刚参加工作的人员做测试工作的一个主要原因.另外,测试人员对工作是否主动也会很影响一个测试人员的发展,举一个例子,

好的测试人员应该是什么样的?

1.工作积极主动 工作态度如何,是评价一个测试人员最主要的方面,一个高水平的测试人员(指纯技术能力)如果没有一个好的工作态度,在测试团队中有时候不但不能对测试工作起到推动作用,有时候还起到阻碍作用,而一个愿意工作的测试人员,哪怕他的技术水平不高,人也不聪明,但对自己的工作认真负责,你告诉他的事情,他都可以认真去做,这个测试人员也会对测试工作起到很大的促进作用.这也是为什么很多企业愿意让刚参加工作的人员做测试工作的一个主要原因.另外,测试人员对工作是否主动也会很影响一个测试人员的发展,举一个例子,