本篇博客来处理一些游戏中的bug,这些bug是我在测试游戏的时候发现的,可能还有其他的一些bug,没有发现,所以大家如果发现有什么bug的话,就在本博客下留言吧。首先子弹的发射感觉很僵硬,不像原来游戏那样感觉很爽,原因是子弹的移动函数move中直接使用的是设置坐标的位置,每0.1s设置一个新的坐标,位置之间没有过渡,所以在函数中改为执行move的动画,这样的话看起来就比较的爽了。

//子弹移动
void Bullet::move(float tm)
{
	this->setVisible(true);
	auto move = MoveBy::create(0.1f,Point(0,OFFSET));
	this->runAction(move);
	//子弹移动出了屏幕
	if(this->getPositionY() > Director::getInstance()->getWinSize().height)
	{
		this->removeFromParentAndCleanup(true);
		//从管理器中移除出去
		auto & vector = Manager::getInstance()->getBulletVector();
		vector.eraseObject(this);
	}
}

之所以有一个setVisible(true)是因为我在添加子弹的时候子弹是不显示的,这样做看起来子弹飞的比较流畅,是一种感官的感觉,你可以去掉这一句话,然后看下效果就明白了。还有一个是对暂停按钮的优化,如果移植到android上,手指点击的时候按钮不是很灵敏,这是因为这个按钮的区域有点小了,所以在点击按钮的时候增大这个点击的区域,移植android的时候手指点击的时候就会很好的响应了,我们在游戏的主场景中的onTouchBegan函数中做一个判断,增大手指点击按钮响应的区域。

//单点触摸的监听函数
bool MainGame::onTouchBegan(Touch * touch,Event * pEvent)
{
	//获得触摸点
	auto point = touch->getLocation();

	//判断手指是否点击了暂停按钮,因为在android上手指的点击范围有点小,这里设置的大一些
	auto menuRect = m_ui->getMenu()->getBoundingBox();
	//origin是图片的左上角点,这里把rect设置的范围大一些
	menuRect = Rect(menuRect.origin.x-menuRect.size.width*3,
		menuRect.origin.y-menuRect.size.height,menuRect.size.width*3,menuRect.size.height*2);
	if(menuRect.containsPoint(point))
	{
		m_ui->getMenu()->setSelectedIndex(1);
		m_ui->menuCallback(m_ui->getMenu());
	}

	//判断手指点击的区域是否在飞机上
	auto rect = m_player->getBoundingBox();
	if(rect.containsPoint(point))
		return true;

	return false;
}

这样的话整个飞机大战的游戏就算做差不多了,关于内存的释放问题貌似做的不是很好,不过游戏不大,这个问题也就不想深究了。我在处理游戏道具的时候和原来的游戏有些不同,这都怪我没有好好的玩玩人家的游戏,要不就会按照他的逻辑写了,不过我博客的处理方法倒也可以,大家根据自己的喜好做吧。移植的过程也是相当的简单,这里就不说了。通过这个小例子,用3.0的一些东西练了一下手,3.0的东西和2.x还是大同小异的,就是改变些函数的名称,变量的名称,其他的思路思想基本也没有什么变化,关于3.0的新内容大家可以留言讨论。到目前为止的源代码和游戏apk请加群(小塔cocos2d-x交流群298136329)索取或者到本网站的资源下载区下载(压缩包的密码是zaojiahua)。最近学习了版本控制工具Git,所以除了以上的途径可以获得游戏源码外,大家可以到GitHub上克隆,地址是https://github.com/zaojiahua/Plane。本网站以后的代码我都将上传到GitHub上供大家学习和交流使用,还不会使用Git的同学可以查看我有关Git的博客。

用3.0实现飞机大战——终结篇