码迷,mamicode.com
首页 > 其他好文 > 详细

15--Box2D使用(一、创建物理世界)

时间:2014-08-01 15:22:01      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   os   strong   io   

          创建工程Box2DTest,去掉背景和精灵对象等。首先在HelloWorldScene.h头文件定义一个屏幕像素与物理世界长度转换宏,并引入box2D头文件

    #define PIXEL_TO_METER 30 
    #include "Box2D/Box2D.h"

          再声明几个函数与变量

    void createWorld();  //创建物理世界
    void createWall();   //创建四周墙体
    void createBall();   //创建刚体
 

     b2World* world;
    b2Body* wallBody ;

    float32 wallLineOffset ;

        createWorld实现

void HelloWorld::createWorld()
{
    b2Vec2 gravity;
    gravity.Set(0.0f,-9.0f);   //物理世界重力向量,这里创建一个向下的重力向量
    b2BodyDef* bodydef = new b2BodyDef();
    world = new b2World(gravity);    //根据重力向量创建物理世界对象

    world->SetAllowSleeping(true);   //允许休眠    
    world->SetWarmStarting(true);    //初始状态将受到重力影响

}

         createWall实现

void HelloWorld::createWall(){
    CCSize s = CCDirector::sharedDirector()->getVisibleSize();

    b2BodyDef wallDef ;   //刚体定义
    wallDef.position.Set(0,0);  //位置

    wallBody = world->CreateBody(&wallDef);   //创建一个刚体(四周墙体)

    b2EdgeShape wallShape;   //形状
    //下   wallLineOffset 方便调整显示位置
    wallShape.Set(b2Vec2(0,0+wallLineOffset), b2Vec2(s.width/PIXEL_TO_METER,0+wallLineOffset));  //设置形状大小

    wallBody->CreateFixture(&wallShape,0);   //将形状连接到框架上
    //
    wallShape.Set(b2Vec2(0,s.height/PIXEL_TO_METER-wallLineOffset),b2Vec2(s.width/PIXEL_TO_METER,s.height/PIXEL_TO_METER-wallLineOffset));
    wallBody->CreateFixture(&wallShape,0);
    //
    wallShape.Set(b2Vec2(0+wallLineOffset,s.height/PIXEL_TO_METER),b2Vec2(0+wallLineOffset,0));
    wallBody->CreateFixture(&wallShape,0);
    //
    wallShape.Set(b2Vec2(s.width/PIXEL_TO_METER-wallLineOffset,s.height/PIXEL_TO_METER),b2Vec2(s.width/PIXEL_TO_METER-wallLineOffset,0));
    wallBody->CreateFixture(&wallShape,0);
}

       createBall实现

void HelloWorld::createBall(){
    CCSize s = CCDirector::sharedDirector()->getVisibleSize();
    for(int i= 0; i < 5; i++)
    {
        b2BodyDef ballDef ;
        ballDef.type = b2_dynamicBody;  //设置刚体为动态物体

        b2CircleShape circleShape ;    //刚体碰撞使用的形状
        b2FixtureDef ballFixtureDef ;

        circleShape.m_p.Set(1.0+i,5.0);
        circleShape.m_radius= 0.5f;

        //刚体连接的框架设置
        ballFixtureDef.shape = &circleShape; 
        ballFixtureDef.density = 1.0;
        ballFixtureDef.restitution = 0.8;    //设置重力恢复系数
        ballFixtureDef.friction = 0.3f;

        ballDef.position.Set(s.width/2/PIXEL_TO_METER,20/PIXEL_TO_METER);
        b2Body* ball = world->CreateBody(&ballDef); //根据刚体定义创建刚体
        ball->CreateFixture(&ballFixtureDef);       //关联框架到刚体上
    }
}

        最后再init方法中添加如下代码

wallLineOffset = 0.5;

    this->createWorld();
    this->createWall();
    this->createBall();

       最后我们运行看看什么情况

bubuko.com,布布扣

        呵呵,我们创建的物体世界没有显示出来,下一篇中我们把物理世界显示出来。

15--Box2D使用(一、创建物理世界),布布扣,bubuko.com

15--Box2D使用(一、创建物理世界)

标签:style   blog   http   color   使用   os   strong   io   

原文地址:http://www.cnblogs.com/BlueBeauty/p/3884776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!