kinematic与static刚体不会触发任何接触回调

Main.as

package{
    import Box2D.Common.Math.b2Vec2;
    import Box2D.Dynamics.b2Body;
    import Box2D.Dynamics.Contacts.b2Contact;
    import Box2D.Collision.b2Manifold;
    import Box2D.Dynamics.b2ContactImpulse;

    public class Main extends BaseMain{

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

        override protected function init():void{
            UIManager.getInstance().init(this);

            var boxA:b2Body=createBox(30,30,50,300);
            var circle:b2Body=createCircle(15,50,400);
            var boxB:b2Body=createBox(50,200,700,300);
            boxA.SetUserData({type:"boxA"});
            circle.SetUserData({type:"circle"});
            boxB.SetUserData({type:"boxB"});

            boxB.SetType(b2Body.b2_staticBody);

            boxA.SetType(b2Body.b2_kinematicBody);
            boxA.SetLinearVelocity(new b2Vec2(10,0));
            boxA.SetPreSolveCallback(preSolve);
            boxA.SetContactBeginCallback(contactBegin);
            boxA.SetContactEndCallback(contactEnd);
            boxA.SetPostSolveCallback(postSolve);

            circle.SetType(b2Body.b2_dynamicBody);
            circle.SetLinearVelocity(new b2Vec2(5,0));
            circle.SetPreSolveCallback(preSolve);
            circle.SetContactBeginCallback(contactBegin);
            circle.SetContactEndCallback(contactEnd);
            circle.SetPostSolveCallback(postSolve);
        }

        private function contactBegin(contact:b2Contact,other:b2Body):void{
            UIManager.getInstance().print("contactBegin:"+other.GetUserData().type);
        }

        private function contactEnd(contact:b2Contact,other:b2Body):void{
            UIManager.getInstance().print("contactEnd:"+other.GetUserData().type);
        }

        private function postSolve(contact:b2Contact,impulse:b2ContactImpulse,other:b2Body):void{
            UIManager.getInstance().print("postSolve:"+other.GetUserData().type);
        }

        private function preSolve(contact:b2Contact,oldManifold:b2Manifold,other:b2Body):void{
            UIManager.getInstance().print("preSolve:"+other.GetUserData().type);

        }

        override protected function stepBefore():void{ 

        }

    };
}

示例:

源码下载:链接:http://pan.baidu.com/s/1bpL8chh 密码:qui7

时间: 2024-08-22 19:31:32

kinematic与static刚体不会触发任何接触回调的相关文章

U3D刚体测试

任何刚体,勾选kinematic,被刚体,非刚体碰撞,主动碰撞.均不会触发 A物体为刚体,B物体为普通碰撞,B隐藏,第一帧B开启,没有任何触发 A物体为普通碰撞,B物体为刚体,B隐藏,第一帧B开启,两者都发生触发 A物体为刚体,B物体为普通碰撞,A移动过去碰到B,两者都发生触发 A,B同为刚体,B隐藏,第一帧B开启,两者都发生触发

Nape "不动"刚体的碰撞交互

"不动"刚体,这里指的是以下两类刚体: 1.刚体的allowMovement和allowRotation都设false的刚体 2.KINEMATIC类型的刚体 如下代码,测试发现输出面板没有内容输出,侦听不到两者的碰撞. 1 package { 2 import nape.callbacks.CbEvent; 3 import nape.callbacks.CbType; 4 import nape.callbacks.InteractionCallback; 5 import nap

Unity 3d 刚体

1.起始的设置如下图: 这是我们运行游戏,方块并不会往下掉. 2.选中CUBE,然后添加刚体                 此时再运行,会发现场景的方块会自动掉在地上. 3.我们来看一下刚体的属性 Mass:设置物体的质量,值越大,重量越大.一般设置时,不超过其他刚体质量的100倍.也不要小于其他刚体质量的100倍. Drag:拖动项,代表物体在拖动过程中,所受到的阻力.此项的值越大,则物体在拖拽过程中受到的阻力也越大. Angular Drag :角速度阻力,代表物体在旋转的时候所受到的阻力

十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象

一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象传入即可.但是在Activity中不能传递监听对象,所以考虑使用广播来实现. public void login(final LoginOnClickListener listener) { Intent intent = new Intent(context, LoginActivity.clas

JS监听键盘两个组合键的触发

*键盘事件的回调是document.onkeydown函数, 该函数会传入一个Event类型的参数 document.onkeydown = function(e) { //编写事件触发时候的回调函数 } *Evnet事件的具体内容请见W3C文档, 样子是这样的: 具体的网址: http://www.w3school.com.cn/jsref/dom_obj_event.asp *实例应用 需求:当按下Ctrl+Enter键时触发saveComment方法 代码为: document.onkey

ztree在onCheck()方法中防止因触发联动关系导致页面多次渲染而卡死的问题

这几天在项目中遇到了要使用树形选择框, 而且要求比较复杂,具体叙述如下: 首先是有个选择框,左边选择是适用的商品,右边显示已经选择的商品.也就是说,左边每次勾选操作,都要触发一个事件去刷新右边的页面, 而且,左边商品如果选择大类,则右边显示大类,其下小类都不显示 也就是说有父子联动的关系. 刚开始的时候, 选择了使用bootStrap的tree_view这个插件,一开始还好,基本成型,后来测试时才发现问题,,当数据量很大的时候,,这个插件用起来很卡很卡,,而且又加了个带搜索功能,这个插件就显得有

碰撞器与触发器[Unity]

请看原帖,移步:Unity3d碰撞检测中碰撞器与触发器的区别 要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过. 物体发生碰撞的必要条件: 两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体. 在unity3d中,能检测碰撞发生的

Unity3D 碰撞关系表 (转)

几个类型碰撞器: 1. 静态碰撞器: 就是只有碰撞器,但没有刚体的 2.刚体碰撞器: 带Rigidbody的碰撞器,这个是最基本的碰撞器 3.运动学刚体碰撞器: 带Rigidbody, 而且Rigidbody的IsKinematic打勾的,注意这个碰撞器是不能加力的,只能修改他的transform才能移动 Triggers 触发器 仅需要选中Inspector中的IsTrigger属性选择框.触发器不受物理引擎控制,当和一个触发器发生碰撞时会发出三个独特的触发信息,为了使两个触发器碰撞时发出碰撞

《割绳子》《蜡笔物理学》《Contre Jour》《顽皮鳄鱼爱洗澡》等游戏用Box2D引擎实现物理部分的方法(转)

从最热门游戏排行榜和flash游戏网站上,你能看到什么?许多2D游戏都有非常出色的物理学和美术设计.现在我们要学习那些游戏使用了什么物理学以及如何用Box2D制作它们. 除了知道是“什么”,更重要的是知道“如何做”,首先,我想问读者一个问题:如果你想复制物理游戏的机制或行为,你需要什么技术和方法? 一年以前,我问了自己同样的问题,<6 Dimensions>就是问题的答案.这款游戏是一个创意的盒子,每一面都包含一组使用Box2D物理学再加上视觉美学技术制作的不同的游戏机制.在此,我将与大家分享