有一个多月没有写学习笔记了,主要是在学习了一段时间后觉得想整个小游戏,选来选去选择了微信飞机大战作为处女作。飞机大战内容简单,比较适合刚学习Cocos2dx的新手拿来练手,而且网上的教程和源码都很多,我就是在Jacky的飞机大战专栏的帮助下完成的。所以代码我就不会细说了,主要是为了记录和总结开发过程中遇到的问题。想看代码详解的可以去Jacky的专栏,这里给出链接:http://blog.youkuaiyun.com/column/details/jackyairplane.html
这里说一下,之前一直都用2.2.3来学习,不过3.0貌似已经出来蛮久了,而且朋友的公司也都在用3.0开发,所以我也决定升级。在官网下载了最新的3.1版本,花了一天时间把之前所有的例子都升级了,其实差别也不是太大很快就能适应。好了,进入正题。
一、背景滚动
如何让背景滚动,让飞机看起来像在往前飞?这大概是大部分童鞋遇到的第一个问题。思考一下会发现实现起来不难。基本原理就是:创建2个同样图片的背景精灵,图片的height要大于窗口的height,1号精灵放在正常的位置,并将2号精灵的位置设置在1号精灵的上面,然后定时器调用精灵位置移动的方法使图片看起来像在滚动。
//加载background1,background1和background2
m_spBackground1 = Sprite::createWithSpriteFrameName("background.png");
m_spBackground1->setAnchorPoint(Point(0, 0));
m_spBackground1->setPosition(Point(0, 0));
addChild(m_spBackground1);
m_spBackground2 = Sprite::createWithSpriteFrameName("background.png");
m_spBackground2->setAnchorPoint(Point(0, 0));
m_spBackground2->setPosition(Point(0, m_spBackground2->getContentSize().height));
addChild(m_spBackground2);
//为防止运行时出现黑线,给两张背景图设置抗锯齿
m_spBackground1->getTexture()->setAliasTexParameters();
m_spBackground2->getTexture()->setAliasTexParameters();
//定时器调用背景移动函数,实现背景滚动
this->schedule(schedule_selector(GameLayer::backgroundOnMove), 0.01f);
//背景滚动函数
void GameLayer::backgroundOnMove(float dt){
//背景1的Y坐标每次-2
m_spBackground1->setPositionY(m_spBackground1->getPositionY() - 2);
//背景2的Y坐标在背景1的基础上-2,这里-2是为了让两张图片有部分重叠,以免看到交界处的黑线
m_spBackground2->setPositionY(m_spBackground1->getPositionY() + m_spBackground1->getContentSize().height - 2);
//当背景2的Y坐标滚动到了0时,马上将背景1的Y坐标还原,这样又回到了最初的位置设定
if (m_spBackground2->getPositionY() <= 0)
{
m_spBackground1->setPositionY(0);
}
}
背景滚动这样就实现了,确实很简单,这是竖屏的实现方法,如果是想横屏滚动也是同样的设置方式,这个效果在很多游戏中都会用到,还是挺实用的。