您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x 3.2 |跑酷游戏之 update使用方法

2014-09-14 00:27 381 查看
cocos2d-x 3.2 |跑酷游戏之 update使用方法
游戏中很多判定逻辑需要实时检测,比如跑酷游戏主角跳跃的时候是是否吃到金币?需要即使判断吧?
比如,跑动的时候地图需要实时朝后移动吧?
在比如,角色每一帧都需要做碰撞检测吧?

所以,为了保证细腻的游戏效果,我们就需要用到 cocos2d本身为我们提供的update方法 

以跑酷中,跳跃下落检测为例:
//在头文件中定义一个update方法 如下

void HelloWorld::update(float
t)

//在游戏逻辑中加入update方法 并实现跳跃-下落检测过程
void HelloWorld::update(float t)
{
//得到角色动画
auto sp=this->getChildByTag(110);
//get得到的是一个Node类型 属性全无 需要转换成map类型 才能调用
auto map=(TMXTiledMap *)getChildByTag(10);

//跳跃
if (jump)
{
//方向朝上
if (spDir==1)
{
//Y轴+速度
sp->setPositionY(sp->getPositionY()+speed);
//衰减
speed-=2;
//落地
if (speed<=0)
{
//方向朝右
spDir=2;
}
//如果方向朝右
}else if (spDir == 2)
{
//未落到台阶上时
bool check=false;
//实时检测 角色是否碰道地图
for (int i=0; i<speed; i+=2)
{
//精灵与地图层碰撞 计算当前精灵相对于地图的坐标
float px =sp->getPositionX();//精灵X坐标
float py =sp->getPositionY()-sp->getContentSize().height/2+i;//精灵Y坐标
float mx=abs(map->getPositionX());//精灵相对于屏幕的X坐标
float my=0;//相对于屏幕的Y坐标
float mapx=px+mx;//精灵相对于地图的X坐标
float mapy=py+my;//精灵相对于地图的y坐标

//获取精灵脚下地图块编号
if (((int)mapy/32) >= 0)
{
int gid=map->getLayer("tile")->getTileGIDAt(Vec2((int)(mapx/32), (int)(19-mapy/32)));
CCLOG("gid %d   %d   %d ",gid,(int)(mapx/32),(int)(19-mapy/32));
if (gid >= 65)
{
check=true;//落到台阶上
sp->setPositionY((int)(py+sp->getContentSize().height/2));
CCLOG("gid %d col %d row%d",gid,(int)(mapx/32),(int)(19-mapy/32));
check=true;
speed=30;
spDir=0;
jump=false;
break;
}
}
//掉下去
if (py <=-500)
{
//游戏结束
gameOver();
}
}
//如果没有碰到地面
if (!check)
{   //下落增加速度
sp->setPositionY(sp->getPositionY()- speed);
speed+=2;
//速度保持最大25
if (speed >25)
{
speed=25;
}
}
}
}
}

总结:以上就是一个update下落检测的实际应用,可以尝试实时背景滚动、以及实时计算角色所处Tilemap地图位置(行、列)等功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐