学习实战三:基于Cocos2d-x引擎模仿微信打飞机游戏

本文介绍了作者在学习Cocos2d-x游戏引擎时,模仿微信打飞机游戏的开发过程。从子弹生成、敌机生成、碰撞检测等方面详细阐述了自己的实践和改进,包括如何优化敌机生成代码、简化碰撞检测,并分享了使用CCUserDefault存储历史得分的实现。文中还提及了游戏截图和源码地址。
摘要由CSDN通过智能技术生成

学习Cocos2d-x游戏引擎有一个来月了,这一个来月的时间里,做了两个小游戏,一个是模仿的打地鼠游戏(做了大概十天);另一个是模仿的打飞机游戏(做了五天)。关于前一个,只是在网上下了个叫做疯狂地鼠的安卓版游戏,然后便开始模仿,用的游戏素材也是那个安装包里提取出来的,对这个游戏的模仿应该说是限于用了素材吧,具体的功能实现是自己想的,因为没有源码可以看。而第二个游戏,微信打飞机,因为前段时间这个游戏火了一把,所以有网友利用Cocos2d引擎和Cocos2d-x引擎做出来了。我做完打地鼠游戏之所以选择了做打飞机这个游戏,也主要是看中了网上有教程。因为自己刚学,所以之前那个打地鼠的游戏只能说有功能了,而有些功能的代码为什么要这么写,我还不是很清楚,我只知道有这个功能,我就模仿,或者说引擎自带了某个效果,我就把这个效果做到我的游戏中了。所以总的来说有点朦胧感,因而想通过做个有系统讲解某个游戏怎么做,有源码可以看的来学着做。

微信打飞机这个游戏,是跟着CSDN上一个博客专栏写的,在前几篇的博客中提到过。他的专栏没有全看完,只是看了前几篇的介绍,了解了下大致的写的思路,然后主要是看他给的源码了。

做这个游戏的过程中,前期工作:如子弹的生成、敌机的生成、碰撞检测、利用数组对子弹和敌机进行管理,这两块模仿着源码做的,也可以说是抄了一遍。然后逐步深入,对这个游戏的主要功能的理解加深,后面的工作主要是自己来做了,源码只是在遇到了某个困难、或者说某个功能没有思路了就去看了看。对于这个游戏我自己感觉做的好的地方主要有:后期自己写了关于敌机生成的代码,作者是单独控制三种飞机的生成,而我后来是重写了这块的代码,单独写敌机类,在初始化的时候根据初始化参数来生成不同的飞机,具体代码,enemy类,继承自CCNode:

enemy.h
typedef enum
{
	k_Enemy_Type_Small=0,
	k_Enemy_Type_Middle,
	k_Enemy_Type_Large,
	k_Enemy_Type_Count
}EnemyType;
首先定义了三种飞机。然后重写了enemy的create函数,使能传入一个飞机类型的参数:

Enemy* Enemy::create(EnemyType type)
{
	Enemy* enemy=new Enemy();
	enemy->init(type);
	enemy->autorelease();
	return enemy;
}

接着在enemy的init函数中根据传递过来的飞机类型参数来生成不同类型的飞机:

bool Enemy::init(EnemyType type/* =k_Enemy_Type_Small */)
{
	_type=type;
	_life=pow((double)type,2)*16+1;
	CCString* frameName=CCString::createWithFormat("enemy%d.png",type);
	_enemy=CCSprite::createWithSpriteFrameName(frameName->getCString());
	this->addChild(_enemy);
	return true;
}

这样就实现了一个函数控制不同类型飞机的生成了,代码显得更为简洁。最后在飞机显示的enemyLayer类中飞机生成类型的参数:

void EnemyLayer::update(float delta)
{
	addSmall++;
	addMiddle++;
	addLarge++;
	float speed=gameSpeed;
	if (addSmall>50-gameSpeed)
	{
		Enemy* enemySmall=Enemy::create(k_Enemy_Type_Small);
		enemySmall->setTag(k_Enemy_Type_Small);
		this->flyTo(enemySmall,3.0f-speed);
		addSmall=0;
	}
	if (addMiddle>300-gameSpeed)
	{
		Enemy* enemyMiddle=Enemy::create(k_Enemy_Type_Middle);
		enemyMiddle->setTag(k_Enemy_Type_Middle);
		this->flyTo(enemyMiddle,5.0f-speed);
		addMiddle=0;
	}
	if (a
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值