Cocos2d-x Box2d笔记 :关节的使用 mouseJoint和PrismaticJoint

来源:未知 责任编辑:智问网络 发表时间:2013-09-02 11:48 点击:

mouseJoint:

作用是实现鼠标拖拽的效果。

使用方法如下

[cpp] 
void HelloWorld::ccTouchesBegan(CCSet *touches, CCEvent *pEvent) 

    //CCLOG("touchBegan"); 
    if(mouseJoint!=NULL) 
        return; 
    CCLOG("touchBegan"); 
    CCSetIterator it; 
    CCTouch* touch; 
 
    for( it = touches->begin(); it != touches->end(); it++)  
    { 
        touch = (CCTouch*)(*it); 
 
        if(!touch) 
            break; 
 
        CCPoint location = touch->locationInView(); 
 
        location = CCDirector::sharedDirector()->convertToGL(location); 
 
        b2Vec2 locationWorld=b2Vec2(location.x/PTM_RATIO,location.y/PTM_RATIO); 
        //这里取得触摸的坐标 
        if(paddleFixeture->TestPoint(locationWorld))//判断是否在触摸范围 
        { 
            //if touched 
            b2MouseJointDef md; 
            md.bodyA=groundBody;//一般为世界边界 
            md.bodyB=paddleBody;//需要拖动的物体 
            md.target=locationWorld;//指定拖动的坐标 
            md.collideConnected=true; // 
            md.maxForce=1000.0f*paddleBody->GetMass(); //给一个拖动的力 
            mouseJoint=(b2MouseJoint*)world->CreateJoint(&md);//创建 
            paddleBody->SetAwake(true);// 
            CCLOG("touchBegan"); 
 
        } 
    } 
 

 

上面就定义了mouseJoint的参数

然后再在touchedMoved里面时时改变坐标就OK了

[cpp]
void HelloWorld::ccTouchesMoved(CCSet *touches, CCEvent *pEvent) 

    if(mouseJoint==NULL) 
        return; 
    CCSetIterator it; 
    CCTouch* touch; 
 
    for( it = touches->begin(); it != touches->end(); it++)  
    { 
        touch = (CCTouch*)(*it); 
 
        if(!touch) 
            break; 
 
        CCPoint location = touch->locationInView(); 
 
        location = CCDirector::sharedDirector()->convertToGL(location); 
        b2Vec2 locationWorld=b2Vec2(location.x/PTM_RATIO,location.y/PTM_RATIO); 
        mouseJoint->SetTarget(locationWorld); 
    } 

最后记得在touchedEnded里面加上这句释放

if(mouseJoint!=NULL)
 {
  world->DestroyJoint(mouseJoint);
  mouseJoint=NULL;
 }

 

 PrismaticJoint

这个就更简单 了

作用是限定一个物理的运动范围

[cpp] 
//restrict paddle 
        b2PrismaticJointDef jointDef; 
        jointDef.collideConnected=true; 
        b2Vec2 worldAxis(1.0f,0.0f);//这里限定在水平X轴的方向 
        jointDef.Initialize(paddleBody,groundBody,paddleBody->GetWorldCenter(),worldAxis);//各个参数的意思是,被限定物体,限定的区域(一般是世界),限定点,方向 
        world->CreateJoint(&jointDef); 

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • cocos2d-x学习笔记(19)--label 、label atlas
    • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
    • Cocos2d-x学习(一):HelloWorld
    • cocos2dx在xcode下开发,编译到android上(2)
    • cocos2d 设置屏幕默认方向
    • Cocos2d-x 2.0 之 Actions “三板斧” 之一
    • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
    • cocos2d-x学习笔记(18)--游戏打包(windows平台)
    • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1