【cocos2dx 3.2】Flappy Bird开发超详细讲解(四)让地图滚动起来吧
2014-11-19 14:09
441 查看
本文可随意转载,转载请声明一下出处就好了。
鉴于上一期代码量太大,这一期就简单点吧。这一期我们来实现让草地无限滚动的动画。我们新建一个类,命名为LandLayer。其实草地滚动的原理就是让两块草地一直改变它的X轴的坐标。无限滚动就是加个判断,当草地1滚出屏幕的时候让它接在草地2后边。
先预览一下效果吧:
![](http://img.blog.csdn.net/20141119145637404?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbXl3ZWF2ZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
好吧,由于不是gif格式的动态图片,大家也看不到效果,大家自行调试看效果吧。
我么来看看代码:
//LandLayer.h
//LandLayer.cpp
然后我们在开始界面调用草地层,很简单,就两句话。
记得导入草地层的头文件哦,下次就不提醒了哦。
本期源码地址链接: http://pan.baidu.com/s/1sjuMqJj 密码: oyf3
鉴于上一期代码量太大,这一期就简单点吧。这一期我们来实现让草地无限滚动的动画。我们新建一个类,命名为LandLayer。其实草地滚动的原理就是让两块草地一直改变它的X轴的坐标。无限滚动就是加个判断,当草地1滚出屏幕的时候让它接在草地2后边。
先预览一下效果吧:
好吧,由于不是gif格式的动态图片,大家也看不到效果,大家自行调试看效果吧。
我么来看看代码:
//LandLayer.h
#ifndef _LANDLAYER_H_ #define _LANDLAYER_H_ #include "cocos2d.h" USING_NS_CC; class LandLayer:public Layer { public: static Scene* createScene(); virtual bool init(); CREATE_FUNC(LandLayer); void landMove(float); private: //两块草地 Sprite* land1; Sprite* land2; }; #endif
//LandLayer.cpp
#include "LandLayer.h" #include "define.h" Scene* LandLayer::createScene() { auto scene = Scene::create(); auto layer = LandLayer::create(); scene->addChild(layer); return scene; } bool LandLayer::init() { if (!Layer::init()) { return false; } auto winSize = Director::getInstance()->getWinSize(); //添加草地一的图片和背景位置,setAliasTexParameters是为了防止两块草地滚动起来的时候出现黑边 land1 = Sprite::createWithSpriteFrameName("land.png"); land1->setAnchorPoint(Point::ZERO); land1->setPosition(Point::ZERO); land1->getTexture()->setAliasTexParameters(); this->addChild(land1); //添加草地二的图片和背景位置,草地二的位置是在草地一的右边,这边减2是防止两块草地之间出现空隙 land2 = Sprite::createWithSpriteFrameName("land.png"); land2->setAnchorPoint(Point::ZERO); land2->setPosition(Point(land1->getPositionX()+land1->getContentSize().width-2,land1->getPositionY())); land2->getTexture()->setAliasTexParameters(); this->addChild(land2); //添加定时器,调用草地滚动的函数,让草地滚动起来吧! this->schedule(schedule_selector(LandLayer::landMove)); return true; } //草地滚动函数 void LandLayer::landMove(float) { //通过不断改变草地x轴的位置来实现草地滚动 land1->setPositionX(land1->getPositionX() - LAND_OFFSET); land2->setPositionX(land2->getPositionX() - LAND_OFFSET); //判断条件,当草地一滚出屏幕的时候让草地一接在草地二后面,草地二同理 if (land1->getPositionX()==-land1->getContentSize().width) { land1->setPositionX(land2->getPositionX()+land2->getContentSize().width-2); } else if (land2->getPositionX()==-land2->getContentSize().width) { land2->setPositionX(land1->getPositionX() + land1->getContentSize().width - 2); } }
然后我们在开始界面调用草地层,很简单,就两句话。
//添加滚动的草地 auto land = LandLayer::create(); this->addChild(land);
记得导入草地层的头文件哦,下次就不提醒了哦。
本期源码地址链接: http://pan.baidu.com/s/1sjuMqJj 密码: oyf3
相关文章推荐
- 【cocos2dx 3.2】Flappy Bird开发超详细讲解(三)预加载场景和开始场景
- 【cocos2dx 3.2】Flappy Bird开发超详细讲解(六)主角小鸟的创建
- 【cocos2dx 3.2】Flappy Bird开发超详细讲解(二)素材准备和屏幕自适应分辨率
- 【cocos2dx 3.2】Flappy Bird开发超详细讲解(一)准备工作
- 【cocos2dx 3.2】Flappy Bird开发超详细讲解(五)游戏的总逻辑控制
- Cocos2d-x地图随精灵无限滚动与边缘检测----之游戏开发《赵云要格斗》(3) cocos2dx 3.3移植版
- 【iOS-cocos2d-X 游戏开发之十三】详细讲解在Xcode中利用预编译并通过Jni调用Android的Java层代码(cocos2dx里访问调用Android函数)!
- cocos2dx[3.2] ——核心类Director/Scene/Layer/Sprite详细讲解
- 【iOS-cocos2d-X 游戏开发之十三】详细讲解在Xcode中利用预编译并通过Jni调用Android的Java层代码(cocos2dx里访问调用Android函数)!
- 图片不间断滚动的特效代码详细讲解
- 详细讲解大型数据库的设计原则与开发技巧
- MYECLIPSE 开发Web Service之详细讲解--第三节
- 快速搭建Struts1.x开发环境详细步骤与讲解
- 详细讲解大型数据库的设计原则与开发技巧
- [嵌入式开发]函数指针数组详细讲解
- Android 游戏开发之主角的移动与地图的平滑滚动(七)
- 【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具!分析程序运行速度!并讲解两种创建SDcard方式!
- 【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具!分析程序运行速度!并讲解两种创建SDcard方式!
- Android 游戏开发之主角的移动与地图的平滑滚动(十五)
- Makefile详解--学习linux下Gtk开发看到的一篇详细的讲解Makefile的文章,转来分享