在上一篇文章中我们创建了的一个物理世界,当物理世界中的刚体一个也没有显示出来。为显示物理世界中的物体,我们需要引入GLES-Render(调试Box2D使用)。这两个文件可以再

%Cocos_Home%\samples\Cpp\TestCpp\Classes\Box2DTestBed中找到,将这两个文件拷贝到项目中并引入工程中。

再声明一个变量

    b2World* world;
b2Body* wallBody ; float32 wallLineOffset ; GLESDebugDraw* m_debugDraw; //调试物理世界绘制对象

声明两个函数

    void printDebugDraw(bool isPrint);
virtual void draw();

printDebugDraw实现

void HelloWorld::printDebugDraw(bool isPrint){
if(!isPrint)
return;
//根据像素与米的转换系数创建调试绘制对象
m_debugDraw = new GLESDebugDraw( PIXEL_TO_METER );
world->SetDebugDraw(m_debugDraw); uint32 flags = 0;
flags += b2Draw::e_shapeBit; //显示刚体上的形状
// flags += b2Draw::e_jointBit; //显示关节
// flags += b2Draw::e_aabbBit;
// flags += b2Draw::e_pairBit;
// flags += b2Draw::e_centerOfMassBit;
m_debugDraw->SetFlags(flags); }

draw实现

void HelloWorld::draw()
{
CCLayer::draw(); ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position ); kmGLPushMatrix(); world->DrawDebugData(); kmGLPopMatrix(); }

修改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); //初始状态将受到重力影响 printDebugDraw(true);
}

现在运行看看效果吧

物理世界的物体就显示出来了,但那几个球怎么没有动呢?不用急,是因为我们还没有让物理世界运行起来。

  让物理世界运行起来

添加函数

void HelloWorld::update(float dt)
{
//速度迭代次数
int velocityIterations = 8;
//位置迭代次数
int positionIterations = 1; world->Step(dt, velocityIterations, positionIterations); //dt为时间步长 }

在init方法中添加代码

bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !CCLayer::init() )
{
return false;
} wallLineOffset = 0.5; this->createWorld();
this->createWall();
this->createBall(); this->scheduleUpdate(); //不断调用update函数
…… return true;
}

再运行看看效果

16--Box2D使用(二、显示物理世界)的更多相关文章

  1. box2d中的物理世界

    box2d中的物理世界,即b2World类就是一个包含了各种物体(body,物理体,或者叫刚体),固定附着物(fixture,形状与物理体的绑定物)以及各种约束体(比如关节),并使其在当中完成各种交互 ...

  2. cocos2d-x快乐的做让人快乐的游戏3:cocos-2d 3.x中的物理世界

    Cocos2d-x 3.0+ 中全新的封装的物理引擎给了开发人员最大的便捷,你不用再繁琐与各种物理引擎的细节,全然的封装让开发人员能够更快更好的将物理引擎的机制加入�到自己的游戏中,简化的设计是从2. ...

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

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

  4. cocos2d-x游戏开发 跑酷(两) 物理世界

    原创.转载请注明出处:http://blog.csdn.net/dawn_moon/article/details/21240343 泰然的跑酷用的chipmunk物理引擎.我没有细致学过这个东西. ...

  5. cocos2d-x游戏开发 跑酷(四) 关联与物理世界

    原创.转载注明出处http://blog.csdn.net/dawn_moon/article/details/21451077 前面一节尽管实现了一个跑动的人物,可是他只不过一个精灵在运行一个跑动的 ...

  6. coco2d-x 3.0游戏实例学习笔记 《跑酷》 第二步---游戏界面&全新的3.0物理世界

    说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程.用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写.并做相关笔记 ...

  7. Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界

    这篇我要给大家介绍两个知识点: 1. 创建游戏物理世界 2. 没了(小若:我噗) 害怕了?不用操心.这太简单了~! 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www ...

  8. Android NFC开发(二)——Android世界里的NFC所具备的条件以及使用方法

    Android NFC开发(二)--Android世界里的NFC所具备的条件以及使用方法 NFC的应用比较广泛,而且知识面也是比较广的,所以就多啰嗦了几句,我还还是得跟着官方文档:http://dev ...

  9. SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

随机推荐

  1. 图的建立——邻接矩阵表示(C语言+VC6.0平台)

    图的邻接矩阵表示及其建立(无向图) #include <stdio.h> #include <stdlib.h> typedef char VertexType;        ...

  2. hdu 4544 湫湫系列故事——消灭兔子

    http://acm.hdu.edu.cn/showproblem.php?pid=4544 优先队列+贪心. #include <cstdio> #include <queue&g ...

  3. 使用SQLiteDatabase进行数据库操作的步骤

    1.获取SQLiteDatabase对象,它代表了与数据库的连接.2.调用SQLiteDatabase的方法来执行SQL语句.3.操作SQL语句的执行结果,比如用SimpleCursorAdapter ...

  4. Qt之QTableView显示富文本(使用了QAbstractTextDocumentLayout和QTextDocument)

    http://blog.csdn.net/liang19890820/article/details/50973099

  5. expect: spawn id exp4 not open

    spawn rsync -avH --delete /home/dwetl/bin dwetl@10.128.8.151:/home/dwetl/bin sending incremental fil ...

  6. 记npm包开发全过程

    概述 为什么开发npm包? 如何开发? 如何写单元测试? package.json 如何发布模块? 如何使用? 为什么开发npm模块? NPM的全称是Node Package Manager,是一个N ...

  7. php PDO操作乱码问题

    前阶段用php写了一个小网页(每周一练),然后就一直忙着其他事也没管它,今天想着给它写个添加数据的页面,用pdo操作,没想到插入数据库的中文数据竟然乱码了,竟然乱码了!然后我就方了,赶紧检测数据传输过 ...

  8. js中的call()与apply()

    js中的call()函数和apply()函数: 1.主要作用:是用于指定作用域和传参 (1)用于指定作用域 window.color = "red"; var o = { colo ...

  9. C++ lambda 表达式传递的变量默认不可变

    我遇到例如以下问题: int count=0; listener->onTouchMoved=[count](Touch* t,Event* e){ count++; log("onT ...

  10. VS2008编程软件过期的问题,过期弹出须要升级窗体的解决的方法

    找到安装文件,再点autorun.exe安装文件,然后反复安装过程就会弹出须要填写系列号的地方,天上以下第一个系列号就可以. Visual Studio 2008 Professional Editi ...