cocos2dx3.0戳青蛙游戏(打地鼠)

1戳青蛙项目描述

1.1功能描述

实现类似打地鼠游戏,青蛙随机出现在屏幕左边5*3的格子中,并会向屏幕右边移动,在青蛙逃离之前,手指点击实现戳灭青蛙的效果。随着分数增加,青蛙越来越多,当青蛙逃离5个后,游戏结束。青蛙分为大青蛙和小青蛙,大青蛙走的忙,要点击3下,小青蛙走的快,只需点击两下。

1.2所需技术

Cocos2D-x精灵类,动作类,多点触摸,CocoStudioUI编辑器,Vector

2戳青蛙运行流程

3戳青蛙详细设计

3.1实体基类

class CEntity : public Node {
public:
	CEntity();
	~CEntity();
	void spriteBind(Sprite* sprite);
	Sprite* spriteGet();
private:
	Sprite* m_SprBind;
	CC_SYNTHESIZE(int, m_iHP, iHP);		//血量
	CC_SYNTHESIZE(int, m_iSpeed, iSpeed);		//速度
	CC_SYNTHESIZE(std::string, m_sName, sName);	//名字
	CC_SYNTHESIZE(Point, m_pos, pos);	//坐标
};

3.2青蛙类

青蛙类是基于实体类的。

class CFrog :public CEntity
{
public:
	CFrog();
	~CFrog();
	virtual bool init();
	CREATE_FUNC(CFrog);
	void createSpriteByName();
	bool clickJudge(Point pos);//判断该青蛙有没被点击
	void getHurt();//获得伤害
	bool dieJudge();//是否死亡判断
};

createSpriteByName是根据m_sName,从精灵缓冲池中选取不同的图片(大小青蛙),并且绑定动画。青蛙具有血量,名字(类型),速度的属性。

3.3青蛙管理器类

class CFrogMgr :public Node
{
public:
	CFrogMgr();
	~CFrogMgr();
	bool initBy();
	CREATE_FUNC(CFrogMgr);
	static CFrogMgr* createBy();
	void createFrog(float dt);
	void frogsMove(float dt);
	void touchDeal();
	CFrog* findClickFrog(Point pos);
	void frogPake(Point pos);
	void notityForPause(Ref* pData);
private:
	Vector<CFrog*> m_listFrog;
};

青蛙管理器类createFrog方法每2秒产生青蛙,产生数量是跟分数成正比的。

随机青蛙的产生的位置,青蛙的类型。每产生一个青蛙加入到青蛙的容器中。

3.3.1青蛙移动

frogsMove方法每0.1秒执行一遍,具体内容是遍历青蛙容器,把每个青蛙个体的横坐标根据速度增加,当青蛙逃离了屏幕的最右端的时候,要把它从容器中删除。特别说明:容器的erase删除一个后会返回迭代器指向的下一个位置。

void CFrogMgr::frogsMove(float dt)
{
	//使用迭代器进行删除处理
	for (Vector<CFrog*>::iterator it = m_listFrog.begin(); it != m_listFrog.end();)
	{
		(*it)->setPositionX((*it)->getPositionX() + (*it)->getiSpeed());//横坐标增加
		if ((*it)->getPositionX() > MAP_WIDE)//当逃离时
		{
			(*it)->removeFromParentAndCleanup(true);
			it = m_listFrog.erase(it);
			NOTIFY->postNotification(NOTIFY_HP, (Ref*)1);
		}
		else
			++it;
	}
}

3.3.2多点触摸响应

遍历青蛙容器,通过找哪个青蛙被点击。使该青蛙掉血,直到其阵亡。

void CFrogMgr::frogPake(Point pos)
{
	CFrog* frogDiv = findClickFrog(pos);
	if (frogDiv == NULL)
		return;
	else
	{
		frogDiv->getHurt();
		if (frogDiv->dieJudge() == true)
		{
			CocosDenshion::SimpleAudioEngine::getInstance()->playEffect(PATH_DIE_MUSIC);//循环播放背景音乐
			frogDiv->removeFromParentAndCleanup(true);
			m_listFrog.eraseObject(frogDiv);
			NOTIFY->postNotification(NOTIFY_SCORE, (Ref*)1);
		}
	}
}

4戳青蛙运行结果

源码下载

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 12:03:18

cocos2dx3.0戳青蛙游戏(打地鼠)的相关文章

Cocos2d-x3.0游戏实例之《别救我》第一篇——前言

我们能学到什么? 这是一个很简单的游戏,但是用到的东西比较多(对新手而言),起码,对于一个实例来说,它涉及的确实有点多. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www.benmutou.com/blog/archives/797 文章来源:笨木头与游戏开发 通过这个游戏实例,可爱的你(小若:那不可爱的人呢?),可以学到以下知识点: 1. Cocos2d-x3.0物理引擎的简单使用 2. 读取Json文件作为怪物和物品配置 3. 利用Tiled地图实现可视化

Cocos2d-x3.0游戏实例之《别救我》第七篇——物理世界的碰撞检測

事实上我也非常吃惊-居然写到第七篇了,我估计也就是四篇的内容,感觉非常奇妙,我也不会非常唠叨什么吖(小若:32个喷! ),怎么都到第七篇了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http://www.benmutou.com/blog/archives/920 文章来源:笨木头与游戏开发 碰撞监听 首先,确保我们创建物理对象的时候,给对象设置了碰撞条件(假设你是一步步按着教程来写的代码,那就是设置好了): body->setCategoryBitmask(1);  

Cocos2d-x3.0游戏实例之《别救我》第三篇——循环滚动背景

好,这篇我们来讲解无限循环滚动背景,这个知识已经被讲到烂了,我以前的文章也介绍过,所以就不那么详细地说明了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www.benmutou.com/blog/archives/823 文章来源:笨木头与游戏开发 为什么是循环滚动背景? 用循环滚动背景,其实是因为我想偷懒,因为这样我只需要准备一张图片就可以了. 我们最终要创建这样的背景,如图: 背景是在滚动的,大家有没有看到?(小若:看你妹,这是jpg,不是gif) 大家是

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

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

Cocos2d-x3.0游戏实例之《别救我》第六篇——从代码中获取UI控件

这篇的内容很简单,获取UI控件,然后使用它. 还记得我们在UI编辑器中给三个按钮分别命名了吧? 现在要用上了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http://www.benmutou.com/blog/archives/918 文章来源:笨木头与游戏开发 根据名字查找控件 首先给TollgateScene再include一些头文件,不然等会编译又报错了: #include "editor-support/cocostudio/CCSGUIReader.h&quo

Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器

好吧,我真心完全搞不懂,我现在只不过是写了3个类而已,怎么就已经到第八篇了?我感觉我说话已经够简单明了毫不唠叨了,真是奇怪.(小若:我噗,噗噗!) 好吧,既然现在主角已经能出现并且进行操作了,那,也是时候让怪物出场了. 让怪物出现太简单了,不就是写一个Monster类,然后创建刚体,让它可以和主角碰撞,然后让主角扣血或者加血么? 没错,确实就是这样的,但是,这不是重点,我想介绍的是,利用关卡编辑器来创建所有要出场的怪物,这才有意思~ 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址

Cocos2d-x3.0游戏实例之《别救我》第九篇——从tmx文件中加载关卡怪物

上一篇我们已经制作好tg1.tmx文件了,现在就要使用它了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http://www.benmutou.com/blog/archives/944 文章来源:笨木头与游戏开发 很抱歉,我们又要新建2个类了,我已经尽力少新建类了,毕竟是教程,类越多越容易混乱. 我们要新建一个Monster类,以及一个MonsterLayer类,专门添加Monster对象. Monster类 来看看Monster.h文件: #ifndef Monste

Cocos2d-x3.0游戏实例之《别救我》第十篇(完结)——用Json配置各类型怪物数据

现在我们有2种类型的怪物,而且创建的时候是写死在代码里的,这是要作死的节奏~ 所以,必须可配置,不然会累死人的. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http://www.benmutou.com/blog/archives/949  文章来源:笨木头与游戏开发 Json文件 什么是Json文件?说白了,它就是一个文本文档,只不过它的内容是按照一定的规则填写的. 于是,我们就可以按照那个规则去读取这份文档. 这,就是配置文件产生的缘由(才怪). (小若:才怪是什么意

Cocos2d-x3.0游戏实例之《别救我》第五篇——使用Cocostudio UI编辑器创建操作界面

这一篇内容其实很简单,已经对Cocostudio比较熟悉的朋友就可以随便扫一下了~(小若:熟悉Cocostudio的人谁还有空看你的基础教程呢) 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www.benmutou.com/blog/archives/892 文章来源:笨木头与游戏开发 下载Cocostudio 首先,去官网下载最新版的Cocostudio:http://www.cocos2d-x.org/download 我这篇教程使用的版本是V1.3.0.1