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方法 并实现跳跃-下落检测过程
总结:以上就是一个update下落检测的实际应用,可以尝试实时背景滚动、以及实时计算角色所处Tilemap地图位置(行、列)等功能
游戏中很多判定逻辑需要实时检测,比如跑酷游戏主角跳跃的时候是是否吃到金币?需要即使判断吧?
比如,跑动的时候地图需要实时朝后移动吧?
在比如,角色每一帧都需要做碰撞检测吧?
所以,为了保证细腻的游戏效果,我们就需要用到 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地图位置(行、列)等功能
相关文章推荐
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法 推荐
- 分享使用Box2D和Cocos2D制作弹球游戏的方法
- 使用Cocos Code IDE设置Quick-Cocos2d-x 3.2-RC1版本语法提示的方法
- 关于Cocos2d-x中的scheduleUpdate和update方法的使用
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- cocos2d-x 3.2 |跑酷游戏:角色动画
- Cocos2d-x 3.2 自动更新 -- 使用AssetsManager更新游戏资源包
- Cocos2d-X 游戏中CCTextField的使用方法
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- 如何在cocos2d-x中使用ECS(实体-组件-系统)架构方法开发一个游戏?
- cocos2d-x 中的pvr.ccz压缩图片的使用方法【iOS游戏开发征文】
- Cocos2d-x 3.2 自动更新 -- 使用AssetsManager更新游戏资源包
- 【Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- 分享使用Box2D和Cocos2D制作弹球游戏的方法
- Cocos2d-x游戏开发之CCLabelTTF标签详解之Create方法(设置自动换行的标签)和换行符的巧妙使用(十六)(高级篇)
- Cocos2d-x游戏开发之CCLabelTTF标签详解之Create方法(设置自动换行的标签)和换行符的巧妙使用(十六)(高级篇) (转)
- 怎么样cocos2d-x正在使用ECS(实体-包裹-制)建筑方法来开发一款游戏?
- 如何在cocos2d-x中使用ECS(实体-组件-系统)架构方法开发一个游戏?
- Cocos2d-x 3.2 自动更新 -- 使用AssetsManager更新游戏资源包
- cocos2d-x 中的pvr.ccz压缩图片的使用方法【iOS游戏开发征文】