曾经玩过苹果游戏一个游戏,主角是一只小鸡,横版跑酷游戏类,地图比较单调,都是波浪

求助:一个小鸡横版跑酷类的苹果游戏名称?_百度知道有个横版的跑酷游戏,人物很细,跑得非常快,按屏幕左边是滑行,右边是跳跃_百度知道cocos2d-x游戏开发 跑酷(六) 地图循环
现在人物可以跑动,可以跳跃和下蹲。但是他还是一个孤独的runner,在一片漆黑的世界里跑在一条永无止境的线上。现在给他加上背景和地板,让他跑在一个色彩斑斓的世界。
泰然JS版的跑酷,这个地图是一个自定义class。在C++里面尽量不要自定义一个class,不然你new一个对象,再delete它,虽然也是一样能跑,但是跟引擎风格不一致,看起来感觉怪怪的。
我这里创建一个MapManager继承CCNode,同样给它一个create静态函数和一个init函数,跟引擎结构一样:
主要逻辑是这样的:
1.将背景和地板的锚点设置为左下角,两张连接起来摆放
2.摄像机移动,如果第一张超出摄像机范围,则重载指针指向这个精灵
3.通过重载指针重新设置x轴位置
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* mL
b2World* mW
float mMapW
CCSprite* mMap0;
CCSprite* mMap1;
CCSprite* mGround0;
CCSprite* mGround1;
MapManager();
static MapManager* create(CCLayer* layer, b2World* world);
bool init(CCLayer* layer, b2World* world);
bool chechReloadMap(float eyeX);
#endif /* defined(__Parkour__Map__) */
看下实现:
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();
map = NULL;
return NULL;
/**传一个主CCLayer,主Layer里面的物理世界*/
bool MapManager::init(cocos2d::CCLayer *layer, b2World *world)
if (!CCNode::init()) {
// 两张背景,两张地板
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().
// 背景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);
/**地图循环逻辑*/
bool MapManager::chechReloadMap(float eyeX)
int newCur = eyeX / mMapW
if (mCurMap == newCur) {
// 重载的精灵指针
CCSprite* tempM
CCSprite* tempG
// 重载指针指向滚出的背景和地板精灵
if (0 == newCur % mMapCount) {
tempMap = mMap1;
tempGround = mGround1;
tempMap = mMap0;
tempGround = mGround0;
mCurMap = newC
// 重新设置x坐标
tempMap-&setPositionX(mMapWidth * (mCurMap + 1));
tempGround-&setPositionX(mMapWidth * (mCurMap + 1));
然后在PlayScene.cpp里面的init函数里面加入这个node,不然会被干掉导致错误
mMapManager = MapManager::create(this, mWorld);
this-&addChild(mMapManager);
然后在update里面加入地图重载逻辑
if (mMapManager-&chechReloadMap(mLastEyeX)) {
CCLog(reload map);
好了,这里就完成了,下一篇要完成这个项目了,期待一下哦
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'我在找一款手机跑酷游戏韩国出的,主角是个女的,开始是在一间教室里,教室很阴森,后面追着的像是死神,_百度知道问:很早以前有种游戏类似于跑酷,地图很多,还可以滑雪,可以很多人一起跑。忘了名字,是联网游戏吧,还_百度知道

参考资料

 

随机推荐