基于cocos2d-x-3.2学习Box2D(一)

cocos版本:cocos2d-x-3.2

环境:Win7+VS2013

由于一些太底层的实现我现在的能力学习不到,只能做一些简单的笔记,供以后翻阅,如果别人能够得到帮助,莫大的荣幸。

一、创建世界并添加刚体

1.创建新的cocos项目,配置扩展库(如有需要):

详细配置点击链接:http://blog.csdn.net/zhangshuliai/article/details/25740343

2.编译并运行成功,然后把HelloWorldScene.cpp里面的init函数修改成下面的样子:

3.创建自己的Box2D世界,如图:

注:1.此处的_world->SetAllowSleeping(true)的设置,是表示是否将静止不动的刚体设置为睡眠状态,如果标志为true,则Box2D在遍历时会直接跳过该刚体,不进行运动模拟计算,这样的目的是提升Box2D的计算效率。

2.在创建Box2D物理世界时,有一个gravity参数,表示重力,b2Vec2表示一个向量,(0,-10)表示重力是向下。向量是用来表示刚体的坐标,速度和受力等属性。Box2D中的b2Vec2d对象只是向量的终点,其起点永远在坐标的原点位置。所以在对b2Vec2进行位移、旋转等计算时,计算结果也都是相对于坐标原点的(我理解的cocos向量也是这样)。

3.创建简单的刚体,创建步骤:

1.创建并且定义b2BodyDef,然后调用b2World类中的CreateBody方法,如图:

注:在Box2D引擎中,所传的位置参数为“米”,cocos中的位置参数为“像素”,所以需要在定义b2BodyDef位置的时候需要将“像素”转换为“米”,这里32像素为1米。

2.创建并定义b2FixtureDef,然后调用b2Body中的CreateFixture()方法,如图:

此处已经成功的在Box2D物理世界里添加了一个自由落体的矩形方块。

二、添加调试视图

在上面的步骤中,已经成功创建世界并添加刚体,但是没有实现渲染,在调试窗口中没有任何显示。为了能将刚体中保存的形状,坐标等信息显示,可以添加调试视图来实现要求。

1.在创建物理世界后,调用b2World中的SetDebugDraw()方法,如图:

注:在SetDebugDraw中的参数b2Draw是个基类,此处用测试Demo中的子类GLESDebugDraw来传递参数。此类是在cocos引擎源码cpp-tests中,详细路径为:引擎根目录\tests\cpp-tests\Classes\Box2DTestBed中的GLES-Render.h和GLES-Render.cpp文件。

2.由于cocos的渲染机制,需要重载draw()方法调用b2World的DrawDebugData来启动调试视图,如图:

1..h文件中添加方法:

2..cpp文件中实现:

注:重载父类虚函数中需要调用父类该方法,否则无法正常运行

在这里就显示出了一个自由落体的方块,可以添加边框来不让方块跌落到窗口外面,如图:

在此,一个简单的完整Box2D测试Demo已经完成。

源码下载:http://download.csdn.net/detail/shinhwalin/8984575

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-13 08:11:37

基于cocos2d-x-3.2学习Box2D(一)的相关文章

基于8086CPU微处理器的汇编学习之MOV指令

汇编指令:MOV的作用是往某个寄存器中存入数值. 格式:mov  寄存器名,数值                数值-->寄存器 mov  寄存器A,存器寄B          B-->A PS:必须前后位数匹配,如: mov   ah,bx     ;error   ah is 8 bit,bx is 16 bit mov   ah, bh    ;right    ah and bh all is 8  bit mov   cx,dx     ;right     cx and dx al

基于OpenGL ES 的深度学习框架编写

基于OpenGL ES的深度学习框架编写 背景与工程定位 背景 项目组基于深度学习实现了视频风格化和人像抠图的功能,但这是在PC/服务端上跑的,现在需要移植到移动端,因此需要一个移动端的深度学习的计算框架. 同类型的库 caffe-android-lib 目前应该是最便于集成使用的深度学习框架库. tensorflow和mxnet据说也有对应的android库,因时间原因暂未测试. CNNdroid,网址https://zhuanlan.zhihu.com/p/25259452,这个是用 ren

基于8086CPU微处理器的汇编学习之ADD指令

ADD指令: 把两个数值相加,将结果放到第一个寄存器里面. 格式: ADD  寄存器名,数值 ADD  寄存器名,寄存器名 add ax,11 add bx,22 PS:清空数据: mov ax,0000 两者数值的存储容量位数要匹配 ----------------------------------------------------------------------------------------------- 用汇编语言编写一个小程序:1122H + 9000H +   AC02H

基于微信的SDK的学习与使用——实现产品支付(一)

声明本篇博客为作者原创,本篇是继支付宝支付之后本人又学习的第二种支付实现,本篇着重于原理与注意事项的学习. 参考  参考 微信支付的开发文档相比支付宝的比较简单,但是使用功能丝毫也不含糊,我觉得简单易读的文档是吸引开发者做出喜好选择的第一步.但是个人觉得,微信支付与支付宝的支付的实现思路大致雷同,并不能说是微信另开思路进行支付创新. 微信支付的官方文档中提供了扫码支付.公众号支付.App支付支付模式.开发者要实现用微信支付的功能,需要商户向微信官方申请微信支付权限,商户获得权限后,将支付账户信息

大数据下基于Tensorflow框架的深度学习示例教程

近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较好的价值,而深度学习在大数据场景下更能揭示数据内部的逻辑关系.本文就以大数据作为场景,通过自底向上的教程详述在大数据架构体系中如何应用深度学习这一技术.大数据架构中采用的是hadoop系统以及Kerberos安全认证,深度学习采用的是分布式的Tensorflow架构,hadoop解决了大数据的存储问

基于8086CPU微处理器的汇编学习之PUSH、POP指令

--------------------------------------------- 栈,是一种数据结构,我觉得栈是抽象的,但是它同样也是实际的,因为它在内存中是连续的内存,只不过人们限制了它的使用:后进先出,学数据结构两年了,现在才理解,实在惭愧. push  ax   ;I.sp = sp - 2                  II .取出ax中的数据,放入当前栈顶 pop   ax   ;I.栈顶地址取出数据,放入ax中   II.sp = sp + 2 ------------

基于RBAC权限管理模型学习

在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权限的管理. 在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色.角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收. 角色与角色的关系可以建立起来以囊括更广泛的客观情况. BAC支持三个著名的安全原则:最小权限原则,责任分离原则和数据抽象原则. (1)最小权限原则之所以被RBAC所支持,是因

初识Socket通信:基于TCP和UDP协议学习网络编程

学习笔记: 1.基于TCP协议的Socket网络编程: (1)Socket类构造方法:在客户端和服务器端建立连接 Socket s = new Socket(hostName,port);以主机名和端口号作为参数来创建一个Socket对象. Socket s = new Socket(address,port);以InetAddress对象和端口号作为参数来创建一个Socket对象. 创建Socket对象时可能抛出UnknownHostException或IOException异常,必须捕获它们

基于cocos2d开发的android小游戏——採花仙

/*cocos 2d 已经成为了如今移动端游戏开发的强有力的工具,眼下主流游戏中多採用cocos 2d游戏引擎. 我也尝试了一下该引擎.我是用的是cocos2d-android,以后要移植到Cocos2d-x上.废话不多说,代码例如以下.*/ watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFwcHlub29t/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/South