首页 > 代码库 > 简单跑酷
简单跑酷
//定义一个方向枚举 (头文件)
typedef enum JumpDir
{
DirUp,DirDown,DirStop
}
public:
int speed;//速度
JumpDir jump;
//******************Cpp文件************
1.
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin =
Director::getInstance()->getVisibleOrigin();
speed = 30;//初始化为30
2.//添加背景层 (锚点默认在 point(0.5,0.5))
auto BG = Sprite:create("bg.jpg");
BG.setPosition(visibleSize/2);
BG.setTag(90);//设置一个标记
this->addChild(BG);
3.//加载地图层,把制作好的地图添加到游戏中(锚点默认在 point(0,0))
auto map01 = TMXTiledMap::create("t01.tmx");
map1->setTag(100);
////设置一个标记
this->addChild(map1);
4.创建一个精灵动画,让它在地图上跑。(可以做一个封装)
auto cache = SpriteFrameCache::getInstance();
cache->addSpriteFramesWithFile("run.plist","run.png");
SpriteFrame *frame;
Vector<SpriteFrame*> arrayFrame;
int index = 1;
do
{
frame = cache->spriteFrameByName(String::createWithFormat("run%d.png",index)->getCString());
if (frame == NULL)
{
break;
}
arrayFrame.pushBack(frame);
index++;
} while (1);
Animation* animation = Animation::createWithSpriteFrames(arrayFrame);
animation->setDelayPerUnit(0.1f);
animation->setLoops(-1);
Animate* act = Animate::create(animation);
sp->runAction(act);
5.在update函数中,无限滚地图
//获取地图标记
auto map01 = this->getChildByTag(100);
if(map01->getPositionX() > -16000+960)//map01->getPositionX()获取的点一直向左移动小于0
{
map01->setPositionX(map01->getPositionX()-5);
}
6.添加触摸事件
处理人物的跳跃
7.封装一个人物跳跃函数
void SpriteJump();
{
//人物跳跃
auto sp = this->getChildByTag(120);
if (jump == JumpDir::DirUp)
//如果方向 向上,否则方向 向下
{ //使精灵的向上运动类似于向 上抛的石头 速度越来越多小,速度小于0 后向下落
sp->setPositionY(sp->getPositionY()+speed);
//精灵的Y轴从30开始递减
speed = speed - 2;
//速度每向上一帧减小 2
if (speed==0)
//当上升的速度小于0时,改变运动方向 向下
{
jump=JumpDir::Dirdown;//运动方向 向下
}
log("DirUp=%d",speed);
}else if (jump==JumpDir::Dirdown)
//如果方向 向上,否则方向 向下
{
sp->setPositionY(sp->getPositionY()-speed);//精灵的Y轴从 0 开始增加
speed = speed + 2;
//速度每向下一帧增加 2
log("DirDown=%d",speed);
checkDown();
//检测是否踩到草坪
if (speed > 30)
{
//jump = JumpDir::DirStop;
//运动方向 停止
speed =30;
checkDown();
}
}
}
-----------------------------
void HelloWorld::checkDown()
{
auto nowplayer =(Sprite*) this->getChildByTag(120);
auto nowmap =(TMXTiledMap*)this->getChildByTag(100);
// px 滚动的地图长度加上人物在屏幕上的位置,就是人物踩在地图是的位置
int px = nowplayer->getPositionX()+abs(0-nowmap->getPositionX());
//py 人物在地图的位置
int py = nowplayer->getPositionY()+0;
//人物在地图的 行 列
int nowrow = px/32;
Tiled地图的行
int nowcol = py/32;
Tiled地图的列
log ("nowrow=%d nowcol=%d",nowrow,nowcol);
if (nowcol < 0 || nowcol >14)
{
return ;
}
(地图的高度/块大小 - nowcol)
int tid = nowmap->getLayer("t01")->getTileGIDAt(Vec2(nowrow,14-nowcol));
log("tid=%d",tid);
if (tid >0)
{
jump = JumpDir::DirStop;
}else
{
log("Game Ocer");
return;
}
}
本文出自 “风中的一粒沙” 博客,请务必保留此出处http://libinqi456.blog.51cto.com/4819343/1606107
简单跑酷