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

说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程。用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 59

USING_NS_CC;
using namespace CocosDenshion;

Scene* PlayScene::createScene(){

	//创建带有物理的Scene
	auto 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之后的游戏场景例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWllZMTczNTMzODMy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

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

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

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

新物理引擎

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

时间: 2024-08-07 21:17:34

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

cocos2d-x 3.0游戏实例学习笔记 《卡牌塔防》第0步---知识点总结&效果预览

/* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写,第一别完全照搬代码:第二可以说明是学习笔记 **3.这里用cocos2d-x 3.0版本重写,很多地方不同,但是从重写过程中也很好的学习了cocos2d-x */ 环境:Win7 .cocos2d-x 3.0final .C++ .VS2012 笔记思路:后面就按这种思路写笔记啦 1.首先给出每次实现的效果截图 2.然后给出设计思路 3.

cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第0步---知识点总结&amp;amp;效果预览&amp;amp;设计思路

/* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏.这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写.第一别全然照搬代码:第二能够说明是学习笔记 **3.这里用cocos2d-x 3.0版本号重写,非常多地方不同,可是从重写过程中也非常好的学习了cocos2d-x */ 环境:Win7 .cocos2d-x 3.0final .C++ .VS2012 笔记思路:后面就按这样的思路写笔记啦 1.首先给出每次实现的效果截图 2.然后给出设计思

cocos2d-x 3.0游戏实例学习笔记 《跑酷》 完结篇--源码放送

说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本重写的,目前我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 OK,到昨天为止,我们已经将游戏基本上写完了,这里本来就是别人开源的东西,我这里重写,当然要公布源码.那么这里有两种方式: 第一种:将我运行成功的整个项目打包,VS2012+win7下的,这种方式就比较大,但是可以打开打开 Run/proj.win32/Run.sln 就可以啦 第二种:就是我只打包

cocos2d-x 3.0游戏实例学习笔记 《跑酷》一 开始界面

开始界面和前辈的基本上差不多:cocos2d-x游戏开发 跑酷(一)开始界面     但是也有不同 下面先给出游戏过程中用到的所有资源 开始界面定义为:MainScene 有如下功能: 1.背景 2.进入游戏界面按钮 3.预先加载背景音乐文件 .h文件 #ifndef __MainScene__H__ #define __MainScene__H__ #include "cocos2d.h" class MainScene : cocos2d::Layer{ public: virtu

cocos2d-x 3.0游戏实例学习笔记 《跑酷》 完结篇--源代码放送

说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 OK,到昨天为止,我们已经将游戏基本上写完了,这里本来就是别人开源的东西,我这里重写,当然要发布源代码.那么这里有两种方式: 第一种:将我执行成功的整个项目打包,VS2012+win7下的,这样的方式就比較大,可是能够打开打开 Run/proj.win32/Run.sln 就能够啦 另外一种:就是我

cocos2d-x 3.0游戏实例学习笔记 《跑酷》移植到android手机

说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本重写的,目前我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 好吧,自从上次<跑酷>完结之后,就什么没做什么的,主要是修复了一点点bug ,也在相应的文章里面做出了相应的改动.不过,只能在window上看着玩又有什么太大意思呢!!!于是乎又尝试着弄到手机上试试--OK,初生牛犊不要脸,哦不!不怕喷.这里记录一下我的移植过程.(这里会用到新的大小的资源.待会也会

cocos2d-x 3.0游戏实例学习笔记 《跑酷》第六步--物理碰撞检测(1)

说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本重写的,目前我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 那么这一步,我们先不急着给主角和金币岩石碰撞检测,我这里把cocos2d-x 3.0 的物理碰撞检测单独抽取出来,之前看了cocos的官网,有一个教程:用新物理引擎完成碰撞检测,就是一个车和猫的碰撞检测,车撞倒猫,猫就消失.我之前也单独试了下.但是那个教程的代码好像完整性不好,不能运行...于是我又借

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

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

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

这一步当中,我们主要完成以下功能: 1.地图的无限滚动---让主角看起来真的是在跑动 2.给主角添加Jump跳跃和crouch下蹲动作 那么首先来让背景滚动起来,在PlayScene.h中添加: //初始化背景 void initBG(); //用update函数让地图滚动 virtual void update(float dt); //背景精灵 cocos2d::Sprite* bgSprite1; cocos2d::Sprite* bgSprite2; cocos2d::Sprite* g

cocos2d-x 3.0游戏实例学习笔记 《跑酷》 第五步--按钮控制主角Jump&amp;Crouch

这一步当中,我们给PlayScene中 添加两个按钮,让主角Jump and Crouch,按钮功能如下: Jump按钮,按下主角跳起来 Crouch按钮,按下主角下蹲,一直按着一直蹲,松开之后主角才站起来 这里用按钮包含头文件"cocos-ext.h"会遇到一点点问题,后面给出详细解决方法: 首先PlayScene.h中要包含头文件: <span style="font-size:14px;">#include "cocos-ext.h&qu