cocos2d-x游戏开发 跑酷(六) 地图循环
2014-03-25 18:43
357 查看
转载请注明出处:http://blog.csdn.net/dawn_moon/article/details/22066007
现在人物可以跑动,可以跳跃和下蹲。但是他还是一个孤独的runner,在一片漆黑的世界里跑在一条永无止境的线上。现在给他加上背景和地板,让他跑在一个色彩斑斓的世界。
泰然JS版的跑酷,这个地图是一个自定义class。在C++里面尽量不要自定义一个class,不然你new一个对象,再delete它,虽然也是一样能跑,但是跟引擎风格不一致,看起来感觉怪怪的。
我这里创建一个MapManager继承CCNode,同样给它一个create静态函数和一个init函数,跟引擎结构一样:
主要逻辑是这样的:
1.将背景和地板的锚点设置为左下角,两张连接起来摆放
2.摄像机移动,如果第一张超出摄像机范围,则重载指针指向这个精灵
3.通过重载指针重新设置x轴位置
看下实现:
然后在PlayScene.cpp里面的init函数里面加入这个node,不然会被干掉导致错误
然后在update里面加入地图重载逻辑
好了,这里就完成了,下一篇要完成这个项目了,期待一下哦
现在人物可以跑动,可以跳跃和下蹲。但是他还是一个孤独的runner,在一片漆黑的世界里跑在一条永无止境的线上。现在给他加上背景和地板,让他跑在一个色彩斑斓的世界。
泰然JS版的跑酷,这个地图是一个自定义class。在C++里面尽量不要自定义一个class,不然你new一个对象,再delete它,虽然也是一样能跑,但是跟引擎风格不一致,看起来感觉怪怪的。
我这里创建一个MapManager继承CCNode,同样给它一个create静态函数和一个init函数,跟引擎结构一样:
主要逻辑是这样的:
1.将背景和地板的锚点设置为左下角,两张连接起来摆放
2.摄像机移动,如果第一张超出摄像机范围,则重载指针指向这个精灵
3.通过重载指针重新设置x轴位置
// // Map.h // Parkour // // Created by lerry on 3/25/14. // // #ifndef __Parkour__Map__ #define __Parkour__Map__ #include "cocos2d.h" #include "resources.h" #include "Box2D/Box2d.h" USING_NS_CC; class MapManager : public CCNode { CCLayer* mLayer; b2World* mWorld; float mMapWidth; int mMapCount; CCSprite* mMap0; CCSprite* mMap1; CCSprite* mGround0; CCSprite* mGround1; int mCurMap; public: MapManager(); static MapManager* create(CCLayer* layer, b2World* world); bool init(CCLayer* layer, b2World* world); bool chechReloadMap(float eyeX); }; #endif /* defined(__Parkour__Map__) */
看下实现:
// // Map.cpp // Parkour // // Created by lerry on 3/25/14. // // #include "Map.h" MapManager::MapManager():mLayer(NULL),mWorld(NULL),mMapWidth(0),mMapCount(2),mMap0(NULL),mMap1(NULL),mGround0(NULL),mGround1(NULL),mCurMap(0) { } MapManager* MapManager::create(cocos2d::CCLayer *layer, b2World *world) { MapManager* map = new MapManager(); if (map && map->init(layer, world)) { map->autorelease(); return map; }else { delete map; map = NULL; return NULL; } } /**传一个主CCLayer,主Layer里面的物理世界*/ bool MapManager::init(cocos2d::CCLayer *layer, b2World *world) { if (!CCNode::init()) { return false; } mLayer = layer; mWorld = world; // 两张背景,两张地板 mMap0 = CCSprite::create(map0); mMap1 = CCSprite::create(map1); mGround0 = CCSprite::create(ground0); mGround1 = CCSprite::create(ground1); // 背景0,设置锚点左下角 mMap0->setAnchorPoint(ccp(0, 0)); mMap0->setPosition(ccp(0, 0)); mLayer->addChild(mMap0); // 地板0,设置锚点左下角 mGround0->setAnchorPoint(ccp(0, 0)); CCSize groundSize = mGround0->getContentSize(); mGround0->setPosition(ccp(0, GROUND_HEIGHT - groundSize.height)); mLayer->addChild(mGround0); // 一张地图宽度 mMapWidth = mMap0->getContentSize().width; // 背景1,设置锚地左下角,位置 mMap1->setAnchorPoint(ccp(0, 0)); mMap1->setPosition(ccp(mMapWidth, 0)); mLayer->addChild(mMap1); // 地板1,设置锚点左下角,位置 mGround1->setAnchorPoint(ccp(0, 0)); mGround1->setPosition(ccp(mMapWidth, GROUND_HEIGHT - groundSize.height)); mLayer->addChild(mGround1); return true; } /**地图循环逻辑*/ bool MapManager::chechReloadMap(float eyeX) { int newCur = eyeX / mMapWidth; if (mCurMap == newCur) { return false; } // 重载的精灵指针 CCSprite* tempMap; CCSprite* tempGround; // 重载指针指向滚出的背景和地板精灵 if (0 == newCur % mMapCount) { tempMap = mMap1; tempGround = mGround1; }else{ tempMap = mMap0; tempGround = mGround0; } mCurMap = newCur; // 重新设置x坐标 tempMap->setPositionX(mMapWidth * (mCurMap + 1)); tempGround->setPositionX(mMapWidth * (mCurMap + 1)); return true; }
然后在PlayScene.cpp里面的init函数里面加入这个node,不然会被干掉导致错误
mMapManager = MapManager::create(this, mWorld); this->addChild(mMapManager);
然后在update里面加入地图重载逻辑
if (mMapManager->chechReloadMap(mLastEyeX)) { CCLog("reload map"); }
好了,这里就完成了,下一篇要完成这个项目了,期待一下哦
相关文章推荐
- cocos2d-x游戏开发 跑酷(六) 地图循环
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环&主角添加动作
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植9:Map Loop【地图循环加载】
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环&主角加入动作
- 【cocos2d-x IOS游戏开发-城市跑酷8】实现街区房子的摆放
- 【cocos2d-x IOS游戏开发-城市跑酷15】完善积分板【CCLabelBMFont】
- 【cocos2d-x IOS游戏开发-城市跑酷19】游戏效果图及资源引用页
- 【cocos2d-x 3D游戏开发】3: 游戏帧循环
- cocos2d-x游戏开发 跑酷(五) 跳起和下蹲动作 手势识别
- cocos2d-x游戏开发 跑酷(八) 对象管理 碰撞检测
- cocos2d-x游戏开发(三)无限滚动地图
- 【cocos2d-x IOS游戏开发-城市跑酷1】跑酷游戏介绍
- 【cocos2d-x IOS游戏开发-城市跑酷12】男一号上场,大家鼓掌!
- cocos2d-x游戏开发 跑酷(二) 物理世界
- cocos2d-x游戏开发 跑酷(九) 源码下载及小结
- 【cocos2d-x IOS游戏开发-城市跑酷9】没有各种坑还叫游戏吗
- 【Cocos2d-X开发学习笔记】第26期:游戏背景之滚动地图背景(CCParallaxNode)的使用
- lua脚本调用cocos2d-x 之实现精灵、Tmx地图创建【iOS游戏开发征文】
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十二课:Cocos2D-X地图系统1-8
- cocos2d-x游戏开发 跑酷(七) 添加金币和岩石