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

本文介绍使用Box2D物理引擎创建不同类型的物体并设置碰撞回调的方法。通过实例演示了如何创建静态、动态和运动体,并实现碰撞开始、结束等事件的监听。

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

转载于:https://www.cnblogs.com/kingBook/p/6834574.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值