转自:http://blog.csdn.net/xiaoxiangp/article/details/7719400
这段时间一直在研究2.0.1这个版本的引擎...发现和1.0X的差别比较大..有很多函数,都改了名字..
这次我分享一下那种类似于雷电..游戏的纵版背景滚动..
1. 如果想使窗口看起来更加适合纵版游戏,首先改变窗口大小(分辨率),在main.cpp这个自动生成的文件中有这个一句:改变那两个数字就行~
- AppDelegate app;
- CCEGLView& eglView = CCEGLView::sharedOpenGLView();
- eglView.setViewName("Hello World");
- eglView.setFrameSize(320, 480);
2. 依旧.先修改类中的定义,我们需要时刻更新场景,使得没次更新我们的地图就移动,所以重点在重载update函数:
注释的代码不用管...
这里要啰嗦一点..2.0.1这个版本..ccTime这个宏替换找不着了..所以原先Update函数的参数类型是ccTime..其实就是float..
- class Game : public cocos2d::CCLayer
- {
- public:
- virtual bool init();
- static cocos2d::CCScene* scene();
- void update(float dt);
- LAYER_CREATE_FUNC(Game);
- protected:
- cocos2d::CCSize s ;
- cocos2d::CCSprite *m_map1;
- cocos2d::CCSprite *m_map2;
- // cocos2d::CCSpriteFrameCache* cache;
- };
- bool Game::init()
- {
- bool bRet = false;
- do
- {
- CC_BREAK_IF(! CCLayer::init());
- s = CCDirector::sharedDirector()->getWinSize();
- m_map1 = CCSprite::create("bg.png");//分别初始化好两个地图
- m_map2 = CCSprite::create("bg.png");
- m_map1->setAnchorPoint(ccp(0,0));
- m_map2->setAnchorPoint(ccp(0,0));
- m_map1->setPosition(ccp(0,0));
- m_map2->setPosition(ccp(0,480));//这里注意,我们把第二章地图的位置放在场景的最上方...因为地图是要往下走的..值根据屏幕高度
- this->addChild(m_map1,0,1);
- this->addChild(m_map2,0,2);
- scheduleUpdate();//启动Update更新
- bRet = true;
- } while (0);
- return bRet;
- }
4. 接下来就是重要的Update函数的内容了:
- void Game::update(float dt)
- {
- //创建两个点对象..分别保存两张地图的位置
- CCPoint map_1p = m_map1->getPosition();
- CCPoint map_2p = m_map2->getPosition();
- //每次调用这个函数的时候就设置两张地图的位置..这里的-3值越大也就越快.
- m_map1->setPosition(ccp(map_1p.x, map_1p.y - 3));
- m_map2->setPosition(ccp(map_2p.x, map_2p.y - 3));
- //分别判断地图.如果完全出场景了..马上调整位置接上
- if (map_2p.y < 0)
- {
- float temp = map_2p.y + 480;//因为我的分辨率是320x480的..所以加了一个屏幕的高度.也就是480
- m_map1->setPosition(ccp(map_1p.x, temp));
- }
- if (map_1p.y < 0)
- {
- float temp = map_1p.y + 480;
- m_map2->setPosition(ccp(map_2p.x, temp));
- }
- }
不出意外的话..那就能看到地图不断的滚动啦..大家随便找一张地图测试就好,因为用到的是2.0.1的引擎.所以这里有些函数的名字和1.0X是对不上的..大家可以找找资料对比一下.其实简单的替换就可以了的..