【cocos2d-x 手游研发小技巧 循环无限滚动的登陆背景】
2016-05-24 19:28
423 查看
原创文章,转载请附上链接:http://www.cnblogs.com/zisou/p/cocos2d-xARPG6.html
首先让大家知道我们想要实现的最终效果是什么样的?
看一个《逆天仙魔录》例子图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/15/0f7911497631dd18e4bd70b384ccf8ef.jpg)
就是一个连贯循环的背景图,如何让他无间隔的循环连贯跑起来,这里我们利用了定时器schedule方法;
定时器功能有无限循环的功能,那么我们运用这个功能主要是拿来循环刷帧的!
我们先准备一下效果图,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/15/7c46613cca17b65ac705560f4dc46810.jpg)
这个背景图够长吧?而且它两边已经被我们的美工做成可循环连接的了,所以我们只需要程序把它循环起来。
具体代码如下:
制造背景的方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
循环背景的方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
ok,以上两个函数就能完成,就差最后一句话了就搞定了:
然后我们看一下效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/15/9c15fca34a6d2d9f34b67c5ab0ded394.jpg)
首先让大家知道我们想要实现的最终效果是什么样的?
看一个《逆天仙魔录》例子图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/15/0f7911497631dd18e4bd70b384ccf8ef.jpg)
就是一个连贯循环的背景图,如何让他无间隔的循环连贯跑起来,这里我们利用了定时器schedule方法;
定时器功能有无限循环的功能,那么我们运用这个功能主要是拿来循环刷帧的!
我们先准备一下效果图,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/15/7c46613cca17b65ac705560f4dc46810.jpg)
这个背景图够长吧?而且它两边已经被我们的美工做成可循环连接的了,所以我们只需要程序把它循环起来。
具体代码如下:
制造背景的方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
void LoginScenes::makebd(float num,int w,int tag) { float x,y; CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); CCSize size = CCDirector::sharedDirector()->getWinSize(); x = size.width; y = size.height+origin.y; CCSprite *background=CCSprite::create(p_loginallbd); background->setAnchorPoint(CCPoint(0,0.5)); background->setPosition(CCPoint(background->getContentSize().width*num+w,y/2)); this->addChild(background,tag,tag); }
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
循环背景的方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
void LoginScenes::movebd(float times) { float x,y; CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); CCSize size = CCDirector::sharedDirector()->getWinSize(); x = size.width; y = size.height+origin.y; CCNode *bg1=CCNode::getChildByTag(99); CCSprite *sp1=(CCSprite*)bg1; CCNode *bg2=CCNode::getChildByTag(98); CCSprite *sp2=(CCSprite*)bg2; sp1->setPosition(CCPoint(sp1->getPositionX()-0.5,sp1->getPositionY())); sp2->setPosition(CCPoint(sp2->getPositionX()-0.5,sp2->getPositionY())); if(sp1->getPositionX()<=-sp1->getContentSize().width) { sp1->setPosition(CCPoint(sp1->getContentSize().width,y/2)); } if(sp2->getPositionX()<=-sp2->getContentSize().width) { sp2->setPosition(CCPoint(sp2->getContentSize().width,y/2)); } }
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
ok,以上两个函数就能完成,就差最后一句话了就搞定了:
this->schedule(schedule_selector(LoginScenes::movebd));
然后我们看一下效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/15/9c15fca34a6d2d9f34b67c5ab0ded394.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/15/7bd86fcecd9f8d086c958eedcc53a417.jpg)
相关文章推荐
- 安卓程序自启动的办法
- cocos2dx源码分析之内存管理
- Cocos2d-x 导入到Eclipse后出现The import org.cocos2dx.lib cannot be resolved错误
- cocos2dx 3D游戏制作参考
- cocos2dx之如何利用plist文件来制作循环动画
- cocos2dx之c++11 bind
- Cocos2dx 3.10音频无法正常播放问题的解决之路
- cocos2d-x项目的创建
- cocos2dx中的回调函数
- Cocos2d-3.x版的HelloWorld工程分析 (二)
- Cocos开发VR菜鸟宝典 第三讲:Cocos 开发 VR环境搭建
- Cocos开发VR菜鸟宝典 第二讲:VR设备选择
- Cocos2d-x开发系列 iOS多Target方案
- #include "extensions/cocos-ext.h" 无法打开
- cocos2d-x项目实战
- cocos2dx 概要
- 在cocos2dx 3.x 中实现带颜色滤镜的Sprite
- cocos2d-x游戏引擎核心(3.x)----事件分发机制之事件从(android,ios,desktop)系统传到cocos2dx的过程浅析
- Cocos2d-3.x的HelloWorld工程分析(一)
- Cocos2dx游戏引擎(3.x)----新的事件分发机制