主角眼熟吗?没错,上次跑酷游戏中的“30”来Jump了,有三种道具。主角光环,竹蜻蜓。翅膀; 有两种怪物,螃蟹和鸟; 有5种板子。点击屏幕,30会把它的嘴巴3给发射出去。能够攻击怪物。
上次的跑酷參考《cocos2d 简单高仿天天跑酷游戏》 。苹果已经审核通过...但做的很差,兴许有时间再更新。后面考虑会出很多其它的该主角游戏。
事实上蛮讨厌"高仿"这两个字的,争取下一款游戏有很多其它原创部分。
有一个Camera,它的位置跟着主角来移动就能够了。
就这么简单。
float minPositionY = 0; void update(float dt){ //follow the hero float nextPositionY = VISIBLE_HEIGHT / 2 - hero->getPositionY(); if(nextPositionY < minPositionY){ minPositionY = nextPositionY; this->setPositionY(minPositionY); } }
首先是板子连续生成的逻辑,不可能一次生成几十个板子。反正屏幕之上和屏幕之下用户都是看不到的,也就是说10几个板子。整个游戏就够用了。到后面。10个都不用。
正常的update是一秒中运行60次。我们须要整一个慢一点的定时器,这样不会太影响性能。
schedule(schedule_selector(GameObjectsLayer::createAndRemoveObjects), 0.064);。专门在里面创建板和移除不须要的板子。deque<JumpBoard*> _boardObjects; void generateSomeBoards(const int& lastPositionX,int startPosition,const int& count); void createAndRemoveObjects(float dt){ if(_pause == true){ return; } if(_boardObjects.size() <= 12){//generate some boards if we only have few boards JumpBoard *lastBoard = _boardObjects.back(); generateSomeBoards(lastBoard->getPositionX(), lastBoard->getPositionY() + getGeneratorHigh(),5); } //remove unused boards JumpBoard* firstBoard = _boardObjects.front(); if(hero->getPositionY() - firstBoard->getPositionY() > 600){ firstBoard->removeFromParent(); _boardObjects.pop_front(); } }
这里游戏的玩法就是怎样控制生成板子。我必须承认这块做的还不好。
typedef enum{ kNormalBoard, //0 kCloudBoard, //1 kMoveBoard, //2 kMoveLttleBoard, //3 kSpringBoard //4 }JumpBoardType; int level1[] = {0,0,0,0,0,0,0,0,0,0,1,1,1}; int level2[] = {0,0,0,0,0,0,0,0,0,0,1,1,2,3,4};
会依据当前的hero高度来选择不同的数组。当index移到最后一个时候,就归0。再次洗牌。
int getBoardTypeDueToFloorNum(){ int floorCount = getFloorCount(); int result = 0; if(floorCount <= 2){ if(_levelIndex >= _level1.size()){ _levelIndex = 0; random_shuffle(_level1.begin(), _level1.end()); } result = _level1[_levelIndex]; ++_levelIndex; return result; }else if(floorCount > 2 && floorCount <= 10){ if(_levelIndex >= _level2.size()){ _levelIndex = 0; random_shuffle(_level2.begin(), _level2.end()); } result = _level2[_levelIndex]; ++_levelIndex; return result; }else{ //无限模式 } }
//typedef enum{ // kHelicopterItem, //0 // kFlyItem, //1 // kShortItem, //2 // kLongItem, //3 // kDefenceBall //4 //}EatItemType; int allEatItemType[] = {4,4,4,0,0,1};
Doodle jump这块做的变态的好,一般怪物出现之前会有杀死怪物或者躲避怪物的道具出现。
仅仅用到了左边红色的部分。
这里就不再赘述。
有真正游戏的感觉。
原文:http://www.cnblogs.com/lcchuguo/p/5271725.html