cocos2d-x之滚动背景

转自:http://blog.csdn.net/xiaoxiangp/article/details/7719400

这段时间一直在研究2.0.1这个版本的引擎...发现和1.0X的差别比较大..有很多函数,都改了名字..


这次我分享一下那种类似于雷电..游戏的纵版背景滚动..



1. 如果想使窗口看起来更加适合纵版游戏,首先改变窗口大小(分辨率),在main.cpp这个自动生成的文件中有这个一句:改变那两个数字就行~


[cpp]  view plain copy
  1. AppDelegate app;  
  2. CCEGLView& eglView = CCEGLView::sharedOpenGLView();  
  3. eglView.setViewName("Hello World");  
  4. eglView.setFrameSize(320, 480);  


2. 依旧.先修改类中的定义,我们需要时刻更新场景,使得没次更新我们的地图就移动,所以重点在重载update函数:

注释的代码不用管...

这里要啰嗦一点..2.0.1这个版本..ccTime这个宏替换找不着了..所以原先Update函数的参数类型是ccTime..其实就是float..

[cpp]  view plain copy
  1. class Game : public cocos2d::CCLayer  
  2. {  
  3. public:  
  4.     virtual bool init();  
  5.   
  6.     static cocos2d::CCScene* scene();  
  7.     void update(float dt);  
  8.   
  9.     LAYER_CREATE_FUNC(Game);  
  10.   
  11. protected:  
  12.     cocos2d::CCSize s ;  
  13.     cocos2d::CCSprite *m_map1;  
  14.     cocos2d::CCSprite *m_map2;  
  15. //  cocos2d::CCSpriteFrameCache* cache;  
  16.   
  17. };  


3. 然后就是init函数..把地图初始化加入场景中..这里我们要用两个地图,没错,加载同一张即可.就是为了第一张移动的时候,第二长就接着第一张移动,,当第一张出去场景后,马上又接着第二章后面..这样就无限循环啦...


[cpp]  view plain copy
  1. bool Game::init()  
  2. {  
  3.       
  4.     bool bRet = false;  
  5.     do   
  6.     {  
  7.         CC_BREAK_IF(! CCLayer::init());  
  8.         s = CCDirector::sharedDirector()->getWinSize();  
  9.   
  10.         m_map1 = CCSprite::create("bg.png");//分别初始化好两个地图  
  11.         m_map2 = CCSprite::create("bg.png");  
  12.   
  13.         m_map1->setAnchorPoint(ccp(0,0));  
  14.         m_map2->setAnchorPoint(ccp(0,0));  
  15.   
  16.         m_map1->setPosition(ccp(0,0));  
  17.         m_map2->setPosition(ccp(0,480));//这里注意,我们把第二章地图的位置放在场景的最上方...因为地图是要往下走的..值根据屏幕高度  
  18.   
  19.         this->addChild(m_map1,0,1);  
  20.         this->addChild(m_map2,0,2);  
  21.   
  22.         scheduleUpdate();//启动Update更新  
  23.   
  24.         bRet = true;  
  25.     } while (0);  
  26.       
  27.     return bRet;  
  28. }  



4. 接下来就是重要的Update函数的内容了:


[cpp]  view plain copy
  1. void Game::update(float dt)  
  2. {  
  3.     //创建两个点对象..分别保存两张地图的位置  
  4.     CCPoint map_1p = m_map1->getPosition();  
  5.     CCPoint map_2p = m_map2->getPosition();  
  6.   
  7.     //每次调用这个函数的时候就设置两张地图的位置..这里的-3值越大也就越快.  
  8.     m_map1->setPosition(ccp(map_1p.x, map_1p.y - 3));  
  9.     m_map2->setPosition(ccp(map_2p.x, map_2p.y - 3));  
  10.   
  11.     //分别判断地图.如果完全出场景了..马上调整位置接上  
  12.     if (map_2p.y < 0)  
  13.     {  
  14.         float temp = map_2p.y + 480;//因为我的分辨率是320x480的..所以加了一个屏幕的高度.也就是480  
  15.         m_map1->setPosition(ccp(map_1p.x, temp));  
  16.     }  
  17.     if (map_1p.y < 0)  
  18.     {  
  19.         float temp = map_1p.y + 480;  
  20.         m_map2->setPosition(ccp(map_2p.x, temp));  
  21.     }  
  22. }  


不出意外的话..那就能看到地图不断的滚动啦..大家随便找一张地图测试就好,因为用到的是2.0.1的引擎.所以这里有些函数的名字和1.0X是对不上的..大家可以找找资料对比一下.其实简单的替换就可以了的..


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值