cocos2dxlua教程 lua中如何开启Box2D调试绘图

Cocos2d-x中由sprite来驱动Box2D的body运动(用来制作平台游戏中多变的机关)
时间: 00:19:51
&&&& 阅读:115
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&
好久都没写文章了,就来一篇吧。这种方法是在制作《胖鸟大冒险》时用到的。《胖鸟大冒险》中使用Box2D来进行物理模拟和碰撞检測,因此对每一个机关须要创建一个b2body。然后《胖鸟》是依据《超级马里奥兄弟》设计的,所以机关能够是各种运动轨迹的平台,绕圈转的乌龟,蹦蹦跳的乌龟等。假设用box2d来做这些运动的话要自己写这些轨迹。可是Cocos2d-x已经提供了非常多的action,自己添加action也非常方便。反过来用sprite去设置box2d的b2body的位置就非常方便了。
& 要求:全部的机关都设置为body
type为b2_kinematicBody,这个type的优点是能够有速度,可是不会物理模拟,而且能够和type为b2_dynamicBody的body发生碰撞检測。
& 如果我们用一个反复移动的平台机关为sprPlatform,这个平台反复上下移动,代码例如以下:
sprPlatform-&runAction(CCRepeatForever::create(CCSequence::create(CCMoveBy::create(2, ccp(0, 100)),
CCMoveBy::create(2, ccp(0, -100)),
然后在sprPlatform的update里设置b2body的属性
void update(float delta)
//更新位置
float angle = getRotation();
CCPoint curPos = getPosition();
b2Vec2 shapeCenter(curPos.x/PTM_RATIO, curPos.y/PTM_RATIO);
body-&SetTransform(shapeCenter, CC_DEGREES_TO_RADIANS(360-angle) );
//更新速度,这个是为了让机关保持匀速
body-&SetLinearVelocity(b2Vec2((curPos.x-lastPos.x)/gPlatformMovingFactor, (curPos.y-lastPos.y)/gPlatformMovingFactor));
lastPos = curP
至于gPlatformMovingFactor,在《胖鸟》里为1.066681。由于b2_kinematicBody仅仅有速度没有质量,所以仅仅能依据某段时间内body移动了多少像素来计算这个数据。总之达到sprite的移动和b2body的移动匹配。b2_kinematicBody假设没有velocity的话,b2_dynamicBody就无法被platform带动。
另外须要注意的是b2body的anchor
point是(0.5,0.5),而cocos2dx的sprite能够自己设置,所以须要自己做些简单的转换。
& 这样b2body就被sprite带动了。
标签:&&&&&&&&&&&&&&&&&&原文地址:http://www.cnblogs.com/mengfanrong/p/3765470.html
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!03:47:29 UTC
local winSize = cc.Director:getInstance():getWinSize()
local PTM_RATIO = 32.0
local gravity = b2Vec2(0.0, -10.0)
self._world = b2World:new_local(gravity)
**self._world:SetContactListener(nil)**
local groundBodyDef = b2BodyDef:new_local()
groundBodyDef.position = b2Vec2(0, 0)
local groundBody = self._world:CreateBody(groundBodyDef)
local groundEdge = b2EdgeShape:new_local()
local boxShapeDef = b2FixtureDef:new_local()
boxShapeDef.shape = groundEdge
groundEdge:Set(b2Vec2(0,0), b2Vec2(winSize.width/PTM_RATIO, 0))
groundBody:CreateFixture(boxShapeDef)
groundEdge:Set(b2Vec2(0,0), b2Vec2(0, winSize.height/PTM_RATIO))
groundBody:CreateFixture(boxShapeDef)
groundEdge:Set(b2Vec2(0, winSize.height/PTM_RATIO), b2Vec2(winSize.width/PTM_RATIO, winSize.height/PTM_RATIO))
groundBody:CreateFixture(boxShapeDef)
groundEdge:Set(b2Vec2(winSize.width/PTM_RATIO, winSize.height/PTM_RATIO), b2Vec2(winSize.width/PTM_RATIO, 0))
groundBody:CreateFixture(boxShapeDef)
local bodySprite = cc.Sprite:create("HelloWorld.png")
:addTo(self)
-- Create body and shape
local bodyDef = b2BodyDef:new_local()
bodyDef.type = b2_dynamicBody
bodyDef.position:Set(300 / PTM_RATIO, 500 / PTM_RATIO)
local _body = self._world:CreateBody(bodyDef)
local shape = b2PolygonShape:new_local()
shape:SetAsBox(195 / 2 / PTM_RATIO, 270 / 2 / PTM_RATIO);
local fixtureDef = b2FixtureDef:new_local()
fixtureDef.shape = shape
_body:CreateFixture(fixtureDef)
_body.userData = bodySprite
self.body_list = {}
table.insert(self.body_list, _body)
local function tick(dt)
self._world:Step(dt, 8, 3)
if self.body_list ~= nil then
for i, body in ipairs(self.body_list) do
local sprite = body.userData
sprite:setPosition(cc.p(body:GetPosition().x * PTM_RATIO, body:GetPosition().y * PTM_RATIO))
sprite:setRotation(-1 * 57.*(body:GetAngle()))
cc.Director:getInstance():getScheduler():scheduleScriptFunc(tick, 1 / 60, false)
01:21:50 UTC
有没有例子啊【cocos2dx游戏开发工程师招聘】_安欧科技招聘-BOSS直聘
cocos2dx游戏开发工程师 8K-15K
城市:深圳经验:1-3年学历:本科
未融资20-99人
http://www.anou.net.cn
cocos2dx游戏开发工程师 8K-15K
HR·刚刚在线
岗位职责:1. 负责cocos2dx游戏客户端应用逻辑的编写; 2. 与项目组美术/策划人员深入沟通,准确实现开发需求; 3. 能够和后台工程师配合,实现前端和服务程序的数据交换功能; 4. 与测试人员配合,了解并解决产品中存在的问题,对产品细节能有很好的把握。任职要求:1、两年以上本职位工作经验;2、熟悉cocos2d-x,Lua, Box2D,能编写高质量代码;3、熟悉Android平台开发流程4、熟悉cocos2d-x引擎配套工具的使用与研发,客户端优化,对客户端架构设计有一定理解;5、善于沟通,有良好的合作精神和独立解决问题的能力;6、具有快速学习不同技术和编程语言的能力;7、熟悉并热爱手机游戏行业,喜欢创业公司环境,渴望与公司一起成长。
竞争力分析
综合竞争力评估
个人综合排名:在人中排名第
深圳市安欧科技有限公司
法人代表:涂建华
注册资金:1000万元
企业类型:有限责任公司
经营状态:存续(在营、开业、在册)
深圳市福田区车公庙泰然六路苍松大厦南座13A13
点击查看地图
推荐公司:
城市招聘:
热门职位:
短信登录扫码登录
+86中国大陆
+60马来西亚
+230毛里求斯
+263津巴布韦
+92巴基斯坦
+880孟加拉国
发送验证码
登录BOSS直聘
短信登录扫码登录
使用 BOSS直聘 APP 扫码登录
请重新刷新二维码
知道了Boss现在也可以使用密码和短信登录了
注册BOSS直聘
使用手机号注册
+86中国大陆
+60马来西亚
+230毛里求斯
+263津巴布韦
+92巴基斯坦
+880孟加拉国
发送验证码
欢迎来到BOSS直聘
快速完善简历
做好与Boss对话前的准备吧。
3s 后自动跳转
可以聊聊吗
我是谁谁谁我是谁谁谁
快速完善简历,与Boss开聊
与在线Boss直接聊,最快当天拿offer
正在上传中
王家卫-3年Java.doc
附件简历将在投递后被Boss预览查看,请 确认显示正确
王家卫-3年Java.doc
附件简历将在投递后被Boss预览查看,请 确认显示正确
更改附件简历
请重新上传,如仍然无法成功,可尝试更改文件格式
王家卫-3年Java.doc
附件简历将在投递后被Boss预览查看,请 确认显示正确
支持 doc、docx、pdf、jpg、png 格式
点击重新预览
王家卫-3年Java.doc
附件简历将在投递后被Boss预览查看,请 确认显示正确
支持 doc、docx、pdf、jpg、png 格式cocos2d-x box2d使用调试绘图
复制TestCpp的GLES-Render.h和GLES-Render.cpp过来。
添加一个成员变量:
GLESDebugDraw *m_debugD
初始化物理引擎的时候:
void HNGameLayer::initPhysics()
m_debugDraw = new GLESDebugDraw(RATIO);
uint32 flags = 0;
flags += b2Draw::e_shapeB
flags += b2Draw::e_jointB
flags += b2Draw::e_aabbB
flags += b2Draw::e_pairB
flags += b2Draw::e_centerOfMassB
m_debugDraw-&SetFlags(flags);
m_b2World = new b2World(b2Vec2(0, -10));
m_b2World-&SetAllowSleeping(true);
// 允许物体进入休眠状态
m_b2World-&SetContinuousPhysics(true);
// 使用连续物理碰撞检测
m_b2World-&SetDebugDraw(m_debugDraw);
....其他代码
重写draw函数
void HNGameLayer::draw()
CCLayer::draw();
if (!m_bDebug) {
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
kmGLPushMatrix();
m_b2World-&DrawDebugData();
kmGLPopMatrix();
CHECK_GL_ERROR_DEBUG();
防止被背景阻挡了。因为draw函数话出来的东西的z-order应该是0,把背景的z-order设成负数就可以了
阅读(...) 评论()

我要回帖

更多关于 cocos2dxlua调试 的文章

 

随机推荐