Cocos2d-x实现场景无限滚动
2013-05-06 14:30
393 查看
在游戏中,人物行走,其实是背景向相反方向移动,给玩家形成了一个人物向前移动的错觉。
详细步骤如下,懒得码字了,代码中注释得很清楚:
1 做一个人物无限原地踏步的动画,代码如下所示:
2. 添加背景图片到场景中,背景图片精灵为awakenjoys的保护数据成员,代码如下:
3. 调用scheduleUpdate定时器(每帧都会执行一次)进行滚动背景处理:
4. scheduleUpdate()定时器内容:
详细步骤如下,懒得码字了,代码中注释得很清楚:
1 做一个人物无限原地踏步的动画,代码如下所示:
//创建人物精灵 CCSprite *mainsprite = CCSprite::create("s_1.png"); //动画部分,创建动画动作 CCAnimation * animation = CCAnimation::create(); //给动画动作添加帧 animation->addSpriteFrameWithFileName("s_1.png"); animation->addSpriteFrameWithFileName("s_2.png"); animation->addSpriteFrameWithFileName("s_3.png"); animation->addSpriteFrameWithFileName("s_4.png"); animation->addSpriteFrameWithFileName("s_5.png"); animation->addSpriteFrameWithFileName("s_6.png"); animation->setDelayPerUnit(0.05f); //设置动画帧时间 animation->setRestoreOriginalFrame(true); //动画执行后还原初始状态 //运行奔跑动画 //将主角精灵放在屏幕放下角 mainsprite->setPosition(ccp(mainsprite->getContentSize().width/2 , mainsprite->getContentSize().height)); //CCActionInterval *run = CCMoveBy::create(10, ccp((size.width - mainsprite->getContentSize().width/2), (size.height - mainsprite->getContentSize().height/2))); mainsprite->runAction(CCRepeatForever::create(CCAnimate::create(animation))); this->addChild(mainsprite, 4);
2. 添加背景图片到场景中,背景图片精灵为awakenjoys的保护数据成员,代码如下:
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class Awakenjoys : public cocos2d::CCLayer { public: // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone virtual bool init(); // there's no 'id' in cpp, so we recommand to return the exactly class pointer static cocos2d::CCScene* scene(); // a selector callback void menuCloseCallback(CCObject* pSender); // implement the "static node()" method manually CREATE_FUNC(Awakenjoys); void update(float dt); protected: cocos2d::CCSprite *bgSprite; cocos2d::CCSprite *bgSprite1; }; #endif // __HELLOWORLD_SCENE_H__
3. 调用scheduleUpdate定时器(每帧都会执行一次)进行滚动背景处理:
//创建背景图1精灵 bgSprite = CCSprite::create("bgroup.jpg"); bgSprite->setPosition(ccp(0, 0)); //屏幕左下角 this->addChild(bgSprite, -1); //添加到场景中 //创建背景图2精灵 bgSprite1 = CCSprite::create("bgroup1.jpg"); bgSprite1->setPosition(ccp(0, 0)); //屏幕左下角 this->addChild(bgSprite1, -2); //添加到场景中 bgSprite->setAnchorPoint(ccp(0, 0)); //设置锚点位置为屏幕左下角 bgSprite1->setAnchorPoint(ccp(1, 0)); //设置锚点位置为屏幕右下角 //调用scheduleUpdate进行滚动地图处理 scheduleUpdate();
4. scheduleUpdate()定时器内容:
void Awakenjoys::update(float dt) { CCPoint bgSprite_p = bgSprite->getPosition(); CCPoint bgSprite1_p = bgSprite->getPosition(); bgSprite->setPosition(ccp(bgSprite_p.x -4, bgSprite_p.y)); bgSprite1->setPosition(ccp(bgSprite1_p.x -4, bgSprite1_p.y)); if (bgSprite_p.x < 0) { float temp = bgSprite_p.x + CCDirector::sharedDirector()->getWinSize().height; bgSprite->setPosition(ccp(temp, bgSprite_p.y)); } if (bgSprite1_p.x < 0) { float temp = bgSprite1_p.x + CCDirector::sharedDirector()->getWinSize().height; bgSprite1->setPosition(ccp(temp, bgSprite1_p.y)); }
相关文章推荐
- cocos2d中分步实现飞机大战----游戏场景中背景的滚动
- Cocos2d-x学习(十二):用cocos2d-x实现MoonWarriors(无限背景滚动的简单实现)
- Cocos2d-x学习(十二):用cocos2d-x实现MoonWarriors(无限背景滚动的简单实现)
- 【Cocos2d-x】新手自学(九)滚动背景..实现无限卷轴效果(2.0.1版本)
- 【Cocos2d-x】实现可上下左右无限滚动的背景
- Cocos2d-X3.0实现地图的无限滚动
- Cocos2d-x学习(十二):用cocos2d-x实现MoonWarriors(无限背景滚动的简单实现)
- android简单实现无限滚动,自动滚动的ViewPager
- Cocos2d-x学习(九):cocos2d-x 无限背景滚动
- cocos2d-x利用CCClippingNode实现滚动字幕
- cocos2d-x 《Flappy Bird 》一、滚动背景的实现
- Cocos2d-x教程第(8)讲-遮罩层实现捕鱼达人滚动数字表盘
- 使用Cocos2d-x 和粒子编辑器实现“天天爱消除”场景特效
- jquery 实现滚动条下拉时无限加载的简单实例
- jQuery实现公告无限循环滚动
- Android简单实现无限滚动自动滚动的ViewPager
- 【cocos2d-x 手游研发小技巧 循环无限滚动的登陆背景】
- Cocos2d-X开发中国象棋《三》開始场景的实现
- 通过监测滚动条实现无限滚动
- 使用vue-infinite-scroll实现无限滚动效果