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

从这里開始,就和之前前辈的有非常多不同啦。

在MainScene中,開始button中,我们就要通过回调函数,进入到我们的游戏场景啦。

那么在游戏场景中我们定义为:PlayScene ,并且是一个带物理世界的场景,cocos2d-x 3.0中要创建物理Scene是非常easy的,由于它都帮我们封装好了。

那么这一步。我们在PlayScene 中主要完毕下面功能:

1.物理世界创建

2.创建一个地面的物理刚体

相关知识个人见解:

所谓的创建物理世界,个人认为是一个抽象的东东,作为新手,開始并不能理解,開始你能够就理解为一个游戏Scene,仅仅是有它自己的特性。详细是什么特性先无论

而所谓的刚体。你能够先觉得就是一个实体,能看得见。摸得着的东东,而且不会被力所改变形状。我们知道。一个个的游戏人物、物体都用精灵来表现出来。精灵就是一个看得见,摸不到的东西。如:有两个精灵,它们面对面走呀走,那么就会重叠起来。后面放置后绘制,也就是你会看到后面的精灵挡住前面的精灵。那么跑酷中,主角和金币也都是精灵,当主角所在的区域遇到金币。那么就会把金币“吃掉”,两个精灵重合在一起,我们就须要做出一系列的推断:“碰撞检測”,来看看主角是不是吃到金币啦。那么就能够用到物理的刚体,主角和金币用精灵展示,可是都带着一个刚体,当它们刚碰到一起,我们就能够运用物理碰撞检測

因为在物理世界中,全部物体都是有重力的。将来主角会带有一个带刚体。那么为了不让主角掉出屏幕外,就须要创建一个地面的刚体,主角就能放置在地面刚体上。

那么你可能要问:地板也是刚体,那么地板不也会掉下去吗?那么cocos中有两种不同的刚体。一种就是受重力影响的。第二种就是静态刚体,你能够把它放在不论什么位置,那么这里地板就是用的静态刚体

直接看代码:

PlayScene .h:

#ifndef __PlayScene__H__
#define __PlayScene__H__#include "cocos2d.h"class PlayScene : public cocos2d::Layer{
public:virtual bool init();static cocos2d::Scene* createScene();CREATE_FUNC(PlayScene);//这里两行的作用是:为后面的layer->setPhysicsWorld(scene->getPhysicsWorld());cocos2d::PhysicsWorld* m_world;void setPhysicsWorld(cocos2d::PhysicsWorld* world){ m_world = world;};private://初始化一个地板的物理刚体void initPhysicWorld();
};#endif

代码中的

cocos2d::PhysicsWorld* m_world;
void setPhysicsWorld(cocos2d::PhysicsWorld* world){ m_world = world;};

这两句代码在后面的过程。看不到它的使用。可是是必要的

PlayScene .cpp:

#include "PlayScene.h"
#include "SimpleAudioEngine.h"#define ground_hight 59USING_NS_CC;
using namespace CocosDenshion;Scene* PlayScene::createScene(){//创建带有物理的Sceneauto scene = Scene::createWithPhysics();//开启调试,将物理世界描绘出来,使得其可见scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);//Layer  注意这里要用 auto ,不然setPhysicsWorld不能够用auto layer = PlayScene::create();layer->setPhysicsWorld(scene->getPhysicsWorld());scene->addChild(layer);return scene;
}bool PlayScene::init(){if(!Layer::init()){return false;}SimpleAudioEngine::getInstance()->playBackgroundMusic("background.mp3",true);initPhysicWorld();//这里创建地面刚体return true;
}void PlayScene::initPhysicWorld(){auto visibleSize = Director::getInstance()->getVisibleSize();auto origin = Director::getInstance()->getVisibleOrigin();//创建一个地面边界 的刚体auto boundBody = PhysicsBody::createEdgeSegment(origin,ccp(visibleSize.width,0),PHYSICSBODY_MATERIAL_DEFAULT,1);//用一个Node 关联物理刚体auto boundNode = Node::create();boundNode->setPhysicsBody(boundBody);boundNode->setPosition(0,ground_hight);this->addChild(boundNode);
}

在createScene函数中,类似普通场景的创建:

auto scene = Scene::create();

我们须要创建特殊的 物理场景就这么做:

//创建带有物理的Scene
auto scene = Scene::createWithPhysics();

然后我们须要把物理世界的刚体们都画出来让我们看到,就要开启 调试

//开启调试,将物理世界描绘出来,使得其可见
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);

然后相同要创建Play 层,而且为这个层绑定物理世界

而在initPhysicWorld函数中。我们为这个物理世界初始化,只只为物理世界弄一个地面刚体,那么由于刚体须要物体来展示。我们就用一个node 来绑定刚体。那么这里另一个宏定义 ground_hight  59  由于后面非常多东西的放置都是要基于这个地面的高度的,查看了一下资源中的地的图片。它的高度像素是59 ,所以。。。。

然后我们就能够開始游戏界面的初步显示啦

在MainScene.cpp的回调函数 start中,

void MainScene::start(){CCLOG("game is start !");Scene* playScene = TransitionFade::create(1,PlayScene::createScene());Director::getInstance()->replaceScene(playScene);
}

那么我们就能够通过開始button切换到我们的游戏场景啦。

这里的TransitionFade::create 仅仅是一个切换场景的方式,你能够转到定义,还有其它的非常多方式,比方能够让你的游戏场景像百叶窗那样出现

执行游戏。按下button之后的游戏场景例如以下:


图中的那条红色的细线就是我们的地面静态刚体。因为开启的调式。全部我们这里能看到

OK,以下就让我们的主人公,进入游戏场景而且跑起来

这里贴出一个关于3.0物理引擎的新手教程:

新物理引擎

个人愚昧观点,欢迎指正与讨论

转载于:https://www.cnblogs.com/liguangsunls/p/7250158.html

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

  1. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第八部---怪物出场

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写.第一别全然照搬代码.第二能够说 ...

  2. cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环amp;主角加入动作

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

  3. cocos2d-x 3.0游戏实例学习笔记 《跑酷》 第五步--button控制主角Jumpamp;Crouch

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

  4. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第三步---编辑器(2)---更方便更多操作更像编辑器

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写,第一别完全照搬代码:第二可以说 ...

  5. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第三步---编辑器(2)---更方便很多其它操作更像编辑器...

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦.他说:随便写,第一别全然照搬代码:第二能够说 ...

  6. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨)    邮箱: happylifemxy@163.com 本篇文章里,我们首先对Direct3D之中固定功能流水线中的 ...

  7. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩 纹理映射技术 二

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  8. Cocos2d-x3.0游戏实例《别救我》目录导航(共10篇,已完结)

    这个5.1假期还真不错,有个小惊喜,那就是,我某个游戏今天的下载量爆表了,突破历史最高点~! 于是,我决定写一个新的游戏实例教程,以示庆祝~ 啊才怪啊~!这教程5.1之前就在写了,我还因此暂停了差不多 ...

  9. 从零开始游戏开发笔记(0):前期准备

    从零开始游戏开发笔记(0):前期准备(持续更新中) 一.开发软件 1.1 游戏引擎 1.2 美工软件 1.3 音乐软件 1.4 插件 二.教程.素材 1.1 学习教程 1.2 素材网站 三.其他技能 ...

最新文章

  1. Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
  2. Scala集合常用方法:fold折叠
  3. Python弹球游戏(tkinter模块编写)
  4. kubernetes集群搭建(二进制方式)
  5. leetcode c程序总提示主函数_Python练手:一行Python解Leetcode习题
  6. 5条线程轮流打印1~100
  7. Hibernate官网jar包下载
  8. Spotfire 表达式之日期和时间函数
  9. android excel在线制作教程,Excel手机表格制作软件
  10. 针对win2003服务器的恶意代码攻击
  11. DirectX11 交换链是什么
  12. 优雅的使用vue+Dcloud(Hbuild)开发混合app
  13. caj格式如何转成pdf格式
  14. 【后台技术】异步编程指北,问题和重点
  15. fancyhdr页眉页脚设计史上最全代码
  16. Hive beeline详解
  17. BP神经网络C语言实现
  18. 课程设计:飞机航班信息查询系统
  19. 2019届小米秋招笔试题第一题_厨艺大赛奖金
  20. 过节前的数据库系统检查

热门文章

  1. Java实现PDF文件转图片(支持单页和多页)
  2. 【惨遭被裁】985毕业,依然过不好这一生
  3. PS笔记:调色部分理论基础
  4. 面试送命题,你为什么从上家公司离职?
  5. 动态代理是什么?应用场景?
  6. Python自做的一个zabbix_sender程序
  7. 服务器过载保护(上篇)——过载介绍
  8. 使用Microsoft SyncToy 文件同步/备份 自动化处理
  9. 央视315曝光科技企业未击中痛点
  10. arduino控制串口屏