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

这一步当中,我们给PlayScene中 添加两个按钮,让主角Jump and Crouch,按钮功能如下:

Jump按钮,按下主角跳起来

Crouch按钮,按下主角下蹲,一直按着一直蹲,松开之后主角才站起来

这里用按钮包含头文件"cocos-ext.h"会遇到一点点问题,后面给出详细解决方法:

首先PlayScene.h中要包含头文件:

<span style="font-size:14px;">#include "cocos-ext.h"
USING_NS_CC_EXT;</span>

然后添加函数:

	//Jump
	void createJumpButton();
	void jumpEvent(Ref* pSender,Control::EventType event);

	//Crouch
	void createCrouchButton();
	void crouchDown(Ref* pSender,Control::EventType event);
	void crouchUp(Ref* pSender,Control::EventType event);

这里先解释一下,Crouch 有两个事件,我们在按钮中,要添加两个按钮事件,一个是按下,那么人物蹲下,然后按钮松开,人物又起来,两个事件,两个回调函数

然后实现:

void PlayScene::createJumpButton(){
	auto visibleSize = Director::getInstance()->getVisibleSize();

	auto jumpLabel = Label::create("Jump","Arail",30);
	auto norBtn = Scale9Sprite::create("norBtn.png");
	auto lightBtn = Scale9Sprite::create("lightBtn.png");

	auto jumpBtn = ControlButton::create(jumpLabel,norBtn);
	jumpBtn->setPosition(visibleSize.width-80,130);
	jumpBtn->setBackgroundSpriteForState(lightBtn,Control::State::HIGH_LIGHTED);

	jumpBtn->addTargetWithActionForControlEvents(
		this,
		cccontrol_selector(PlayScene::jumpEvent),
		Control::EventType::TOUCH_DOWN);

	this->addChild(jumpBtn);
}
void PlayScene::jumpEvent(Ref* pSender,Control::EventType event){
	SimpleAudioEngine::sharedEngine()->playEffect("jump.mp3");
	m_runner->Jump();
}

void PlayScene::createCrouchButton(){
	auto visibleSize = Director::getInstance()->getVisibleSize();

	auto crouchLabel = Label::create("Crouch","Arail",30);
	auto norBtn = Scale9Sprite::create("norBtn.png");
	auto lightBtn = Scale9Sprite::create("lightBtn.png");

	auto crouchBtn = ControlButton::create(crouchLabel,norBtn);
	crouchBtn->setPosition(visibleSize.width-100,80);
	crouchBtn->setBackgroundSpriteForState(lightBtn,Control::State::HIGH_LIGHTED);

	//按钮按下
	crouchBtn->addTargetWithActionForControlEvents(
		this,
		cccontrol_selector(PlayScene::crouchDown),
		Control::EventType::TOUCH_DOWN);

	//按钮松开
	crouchBtn->addTargetWithActionForControlEvents(
		this,
		cccontrol_selector(PlayScene::crouchUp),
		Control::EventType::TOUCH_UP_INSIDE);

	this->addChild(crouchBtn);
}
void PlayScene::crouchDown(Ref* pSender,Control::EventType event){
	m_runner->Crouch();
	m_runner->setPosition(runner_posX,ground_hight+m_runner->getCrouchSize().height/2);
	SimpleAudioEngine::sharedEngine()->playEffect("crouch.mp3");
}
void PlayScene::crouchUp(Ref* pSender,Control::EventType event){
	//否则,在跳起来的时候,点击crouch 松开之后,状态就会变成running
	if(m_runner->getState() == crouch){
		m_runner->stopAllActions();
		m_runner->Run();
	    m_runner->setPosition(runner_posX,ground_hight+m_runner->getRunJumpSize().height/2);
	}
}

然后在Runner.cpp中的init 函数中,还要记得

this->scheduleUpdate();,因为我们需要在update中判断起跳到最高点下落

然后在 PlayScene 的init函数也要添加 两个create按钮函数

那么生成,然后这里就会遇到问题:

无法打开包括文件:“extensions/ExtensionMacros.h”:

那么这里我们需要在项目上右键到属性,【配置属性】->【C/C++】->【常规】->【附加包含目录】如图:

在最下面添加:$(EngineRoot)

然后同样在【连接器】->【输入】中添加libExtensions.lib  如图:

然后重新生成,那么这里。。可能会有的小伙伴任然遇到问题 说libExtension.lib 有问题。。。关于这个问题解释起来我也不是很清楚,但是后来找到解决方法,如果遇到这个问题,那么就需要在这里下载
libExtension.lib(不用积分)然后把它直接放在 [项目的目录下] / proj.win32 / Debug.win32中,然后就可以了。那么这个问题应该不是全部都有,有的话可以用我给的方法解决,亲测!!!我想应该有别的方法,如果有知道的麻烦告诉我一下,不胜感激

再次重新生成,终于可以看到效果:

好啦,后面要开始准备金币和岩石阻碍啦。。。

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

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

时间: 2024-10-16 05:42:18

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

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 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游戏实例学习笔记 《跑酷》移植到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游戏实例学习笔记 《跑酷》 第三步---主角开跑&amp;同时带着刚体

在这一步,我们主要是把主角加入到游戏场景中来,并且让它跑动,这里的跑动,实际上也就是执行一组动画,让其看起来像是在跑动,而且相对屏幕的位置也不会改变 我们会定义一个主角类:Runner,而这一步就要用到 帧动画 的创建和使用等知识点. 对于Runner,我的设计思路如下: 1.主角有一个动作集合,包括跑动,跳起来,以及蹲下.那么就有不同的帧动画,那么这里借鉴到 晓风残月前辈的方法,将帧动画打包命名,之后根据动作名来执行动作 2.主角需要绑定刚体,并且在不同的动作下的刚体大小不同 3.我们给主角设

cocos2d-x 3游戏实例学习笔记 跑酷(前言)

游戏开发环境:coco2d-x 3.0正式版 . C++ .Win7.VS2012 自己的现状: 大二学生一枚,刚刚接触cocos2dx 不久,是看着笨木头的<游戏开发之旅>入门的,并且也只是学习了基本的知识点用法,木头的代码是基于2.X写的,但是我一开始就是使用3.0的引擎,所以也是一边学习一边把之前的代码向3.0转变.也看了许多网上教程,star特530等许多人的博客....而且C++那些也只是学习了皮毛.看到网上许多游戏实例教程,于是自己决定用实例来学习cocos. 学习背景: 网上有许