热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

说明:这里是借鉴:晓风残月 前辈的博客,他是将泰然网的跑酷教程。用cocos2d-x2.X版本号重写的,眼下我正在学习cocos2d-X3.0于是就用cocos2d-X3.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之后的游戏场景例如以下:

技术分享

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


推荐阅读
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 几何画板展示电场线与等势面的交互关系
    几何画板是一款功能强大的物理教学软件,具备丰富的绘图和度量工具。它不仅能够模拟物理实验过程,还能通过定量分析揭示物理现象背后的规律,尤其适用于难以在实际实验中展示的内容。本文将介绍如何使用几何画板演示电场线与等势面之间的关系。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
author-avatar
wuli空空以空空
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有