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

原创。转载请注明出处:http://blog.csdn.net/dawn_moon/article/details/21240343

泰然的跑酷用的chipmunk物理引擎。我没有细致学过这个东西。

只是我看了一下他们的使用方法,感觉跟box2d差点儿相同。box2d用纯真的面向对象C++开发,用在这里应该没有问题,试一下。

泰然的project没有增加box2d模块。所以须要增加。

将external/Box2D增加project,将没用的引用删掉。增加后结构例如以下

然后新建一个PlayScene类。開始创建物理世界。

为了方便调试box2d物理世界,须要接入debug渲染器。将TestCpp/Classes/Box2DTestBed/下的GLES-Render.h和GLES-Render.cpp增加到project,这个能够绘制出物理模型的形状。

由于box2d针对0-10米的仿真做过优化。所以我这里将像素大小映射到10左右

[cpp] view
plain
copyprint?

  1. #define RATIO 32

看下PlayScene.h

[cpp] view
plain
copyprint?

  1. //
  2. //  PlayScene.h
  3. //  Parkour
  4. //
  5. //  Created by lerry on 14-3-14.
  6. //  Copyright (c) 2014年 Goonear Co.,Ltd. All rights reserved.
  7. //
  8. #ifndef __Parkour__PlayScene__
  9. #define __Parkour__PlayScene__
  10. #include "cocos2d.h"
  11. #include "Box2D.h"
  12. #include "GLES-Render.h"
  13. #define RATIO 32
  14. #define GROUND_HEIGHT 57
  15. #define RUUNER_STARTX 80
  16. class PlayScene : public cocos2d::CCLayer
  17. {
  18. b2World* mWorld;
  19. GLESDebugDraw* mDebugDraw;
  20. private:
  21. // 初始化物理世界
  22. void initPhysics();
  23. // 绘制物理世界debug区域
  24. void draw();
  25. // 开启物理世界debug
  26. void setDebug(bool isDebug);
  27. public:
  28. virtual bool init();
  29. virtual void update(float dt);
  30. CREATE_FUNC(PlayScene);
  31. static cocos2d::CCScene* scene();
  32. };
  33. #endif /* defined(__Parkour__PlayScene__) */

如今主要有一个初始化物理世界的函数initPhysics()函数,在这里创建了一个地板。

[cpp] view
plain
copyprint?

  1. void PlayScene::initPhysics()
  2. {
  3. mWorld = new b2World(b2Vec2(0, -10));
  4. mWorld->SetAllowSleeping(true);
  5. mWorld->SetContinuousPhysics(true);
  6. //    mWorld->SetContactListener(this);
  7. // 地板body
  8. b2Body* ground = NULL;
  9. b2BodyDef bd;
  10. ground = mWorld->CreateBody(&bd);
  11. // 地板
  12. b2EdgeShape shape;
  13. shape.Set(b2Vec2(0, GROUND_HEIGHT / RATIO), b2Vec2(INT_MAX, GROUND_HEIGHT / RATIO));
  14. ground->CreateFixture(&shape, 0.0f);
  15. setDebug(true);
  16. }

这里创建了一个边缘形状。边缘形状类似静态物体。可是它没有体积。box2d里面的碰撞算法要求碰撞的两个物体至少一个要有体积。所以边缘形状不能和边缘形状碰撞。能够和其它形状类物体碰撞。

box2d的物理世界有自己的世界循环函数。跟cocos2d-x的update函数类似,所以在update函数里面调用box2d的迭代函数

[cpp] view
plain
copyprint" style="color:rgb(160,160,160); text-decoration:none; background-color:inherit; border:none; padding:0px; margin:0px 10px 0px 0px; font-size:9px">?

  1. void PlayScene::update(float dt)
  2. {
  3. // 物理世界的迭代函数
  4. mWorld->Step(dt, 10, 8);
  5. }

Step函数的參数解释一下,第一个时间參数,单步迭代步长,第二个參数单步时间内速度迭代次数。第三个參数但不是件内位置迭代次数。

这几个參数有建议值。我这里就取这几个值。

然后在MainScene.cpp的onPlay函数里面填上回调的实现:

[cpp] view
plain
copyprint" style="color:rgb(160,160,160); text-decoration:none; background-color:inherit; border:none; padding:0px; margin:0px 10px 0px 0px; font-size:9px">?

  1. // startbutton回调
  2. void MainScene::onPay()
  3. {
  4. CCLog("onPlay click");
  5. // 创建带过渡的场景
  6. CCScene* s = CCTransitionFade::create(1, PlayScene::scene());
  7. CCDirector::sharedDirector()->replaceScene(s);
  8. }

这里加了一个过渡场景,跑起来看到一条线。初步完毕。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3bl9tb29u/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" style="border:none; max-width:100%">

时间: 2024-08-10 15:08:58

cocos2d-x游戏开发 跑酷(两) 物理世界的相关文章

史上最全最完整的IOS 游戏开发 PDF电子书定制下载

<iOS 5游戏开发>作者:(新西兰)James·Sugrue著 页数:191 出版社:北京市:人民邮电出版社 出版日期:2012.08 简介:<iOS5游戏开发>是一本iOS5游戏开发的基础入门书.全书使用通俗易懂的简单实例,带领读者经历构建经典动作游戏的整个周期.读者在本书的阅读过程中,将经历从开发概念.规划设计一直到编写实际代码的全过过程.本书的每一章,都将演示游戏创建过程中的一个逻辑步骤,读者将在其中学习如何创建Sprite,用触摸屏.重力感应器和屏幕游戏棒控制玩家角色等-

[游戏开发-学习笔记]菜鸟慢慢飞(一)

"菜鸟"就是我自己. 分享一下我从零开始学习游戏开发的过程,心得什么的.本篇先扯个开头,说说个人一些乱七八糟的想法. 从0开始 其实,只要有心,不管干哪一行,都不能算从零开始.总会有办法了解到行业的信息.我之前是干船舶电气的,一路过来,最大的感觉是:不怕你找不到资料,就怕你没时间.我要做的是分清楚自己想学什么,怎么样去提高自己,然后沿着自己路线"慢慢"朝前飞.比如:知乎就是个很好的地方,我最早接触游戏开发,是在这里.决定学这个,也是在知乎喝了鸡汤. 游戏开发 对我来

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

Cocos2d-x 3.0+ 中全新的封装的物理引擎给了开发人员最大的便捷,你不用再繁琐与各种物理引擎的细节,全然的封装让开发人员能够更快更好的将物理引擎的机制加入?到自己的游戏中,简化的设计是从2.0到3.0+的一个质的飞跃.(假设用的2.x版本号的cocos2d-x,看前一篇文章box2d) 以下相同以一个小demo来展示一下物理引擎的运用,同一时候说一下我在运用物理引擎中遇到的一些小小的问题. Cocos2d-x 3.0+中的物理属性: 1.物理世界被集成到场景中,当你创建一个场景,你能够

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

从这里开始,就和之前前辈的有很多不同啦. 在MainScene中,开始按钮中,我们就要通过回调函数,进入到我们的游戏场景啦. 那么在游戏场景中我们定义为:PlayScene ,而且是一个带物理世界的场景,cocos2d-x 3.0中要创建物理Scene是很简单的,因为它都帮我们封装好了. 那么这一步,我们在PlayScene 中主要完成以下功能: 1.物理世界创建 2.创建一个地面的物理刚体 相关知识个人见解: 所谓的创建物理世界,个人觉得是一个抽象的东东,作为新手,开始并不能理解,开始你可以就

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

说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程.用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写.并做相关笔记 从这里開始,就和之前前辈的有非常多不同啦. 在MainScene中,開始button中,我们就要通过回调函数,进入到我们的游戏场景啦. 那么在游戏场景中我们定义为:PlayScene ,并且是一个带物理世界的场景,cocos2d-x 3.0中要创建物理Scene是非常easy的,由于它都帮我们封装好

Swift游戏实战-跑酷熊猫 11 欢迎进入物理世界

物理模拟是一个奇妙的事情,以此著名的游戏有愤怒的小鸟.我们在这节将会一起来了解如何设置重力,设置物理包围体,碰撞的检测. 要点: 设置物理检测的代理: 让主场景遵循SKPhysicsContactDelegate协议.通过didBeginContact方法来响应物体之间是否碰撞.自然,我们要把物理系统的代理设为主场景. self.physicsWorld.contactDelegate = self 设置重力: self.physicsWorld.gravity = CGVectorMake(0

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

这篇我要给大家介绍两个知识点: 1. 创建游戏物理世界 2. 没了(小若:我噗) 害怕了?不用担心,这太简单了~! 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www.benmutou.com/blog/archives/804 文章来源:笨木头与游戏开发 3.0新亮点,史上最简单的物理引擎 在Cocos2d-x3.0里使用物理引擎,会很有快感,因为很多繁琐的东西它都帮我们封装好了. 那么,我要开始创建游戏的关卡场景了,大家跟紧了. 我们给关卡场景命名为Toll

HTML5物理游戏开发 - 越野山地自行车(三)粉碎自行车

自上一章发布到现在已时隔四月,实在对不住大家,让大家久等了~话说不是我不关注我的博客,而是事情一多起来写博客的时间就少了.待到今日有空了,回头看了看自己以前写的文章,猛得发现已经四个月不曾写文章了,便只得叫声:"苦也~",我害怕本系列文章会拖得更久,于是立刻提笔,也好为本系列文章留个凤尾. 首先,大家来温习一下前面两篇里的内容吧: HTML5物理游戏开发 - 越野山地自行车(二)创建一辆可操控的自行车 http://blog.csdn.net/yorhomwang/article/de

走进VR游戏开发的世界

注: 原文2016年2月发表于公司内部社区, 最近才由同事转载出来, 删去了文中引用的一些内部文章和视频. 在这里我也只是把外网版本转过来, 留做备份. 背景介绍 我们组在2014年下半年尝试开发了一款 XboxOne 平台的体感游戏, 2015年上半年进行收尾工作的同时, 结合之前积累的体感交互经验, 开始进行 VR 游戏的预研工作. 在这近一年的时间里, 一方面从外界感受到了一股虚拟现实快速发展的潮流, 另一方面也体会到身边很多人对 VR 游戏的了解非常有限. 现在我们自己的VR游戏Demo