




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
游戏开发引擎Cocos2d-x地图随精灵无限滚动与边缘检测-之游戏开发赵云要格斗(3)本文检索关键词:游戏引擎,游戏开发引擎,cocos引擎html5游戏开发本本章在前文Cocos2d-x自定义按钮类控制精灵攻击的基础上,实现了精灵向右运动到地图中间时,地图能跟着移动,但此时精灵是原地不动只是播放跑动画。并且,当地图移动到边缘时,地图不在移动,但此时精灵能移动同时播放跑动画。网上看了些别人写的地图,很多都是通过两张地图交替显示来实现,这里我就想通过一个地图来实现,英雄移动到地图的最左边或最右边时,地图不能移动,但是英雄还是能移动。这样比较符合我们玩游戏时的情形。Cocos2d-x版本:2.2.5工程环境:windows7+VS2010下面是要滚动的地图,只有一张,但是很长。先看看效果一、在英雄类中增加判断英雄是否运动到了窗口的中间位置函数在上一篇的英雄类中再增加一个函数:12345678910/判断英雄是否运动到了窗口的中间位置,visibleSize为当前窗口的大小boolJudgePositona(CCSizevisibleSize);然后这是它的实现:boolHero:JudgePositona(CCSizevisibleSize)if(this-getPositionX()!=visibleSize.width/2)/精灵到达左边returnfalse;elsereturntrue;/到达中间位置二、自定义地图类这里为了后头地图能再实现其它功能,我自己又设计了一个地图类,它能根据英雄的运动还判断是否要移动地图。其实这里的地图就是一个CCSprite ,然后把它加到当前类中,这个类是从CCNODE中派生的。然后根据当前英雄的位置来判断自己是否在进行移动,在MoveMap(CCNode *hero,CCSize visibleSize)这个函数中,其实实现得很简单。传入当前英雄和当前窗口的大小,然后就是一些判断了。直接看代码Map.h:1234567891011121314151617181920212223#ifndef_MAP_H_#define_MAP_H_#includecocos2d.hUSING_NS_CC;classMap:publicCCNodepublic:Map();Map();/初始化地图,window_sizeo为控制台大小voidInitMap(constchar*map_name,constCCSize&window_size);/根据精灵的位置移动地图,visibleSize为当前窗口的大小voidMoveMap(CCNode*hero,CCSizevisibleSize);/判断地图是否到达边缘boolJudgeMap(CCNode*hero,CCSizevisibleSize);/virtualvoidupdate(floatdelta);CREATE_FUNC(Map);private:CCSprite*m_map;/地图精灵;#endif/_MAP_H_然后这是它的实现Map.cpp:1234567891011121314151617181920212223242526272829303132#includeMap.hMap:Map():m_map(NULL)Map:Map()voidMap:InitMap(constchar*map_name,constCCSize&window_size)this-m_map=CCSprite:create(map_name);m_map-setAnchorPoint(ccp(0,0);/设置锚点this-setAnchorPoint(ccp(0,0);/设置锚点this-addChild(m_map);voidMap:MoveMap(CCNode*hero,CCSizevisibleSize)/if(hero-getPositionX()=visibleSize.width/2)/精灵运动到中间,地图才移动if(this-getPositionX()!=-(m_map-getContentSize().width-visibleSize.width)/防止地图左边运动后超出边缘this-setPosition(this-getPositionX()-1,this-getPositionY();boolMap:JudgeMap(CCNode*hero,CCSizevisibleSize)if(this-getPositionX()!=-(m_map-getContentSize().width-visibleSize.width)/防止地图左边运动后超出边缘returnfalse;else/地图已经移动到达边缘returntrue;三、根据英雄精灵和窗口的大小来移动地图或移动精灵上面自定义的地图类要怎么用呢?在HelloWorldScene.h中添加头文件1#includeMap.h同时定义一个成员变量12private:Map*mymap;/地图这时就可以直接用了。在init()函数中,原本我是用:(在第一篇-虚拟摇杆的开头那里有写)1234/修改背景图片CCSprite*pSprite=CCSprite:create(background_1.jpg);pSprite-setPosition(ccp(visibleSize.width/2+origin.x,visibleSize.height/2+origin.y);this-addChild(pSprite,0);/这里的0表示放在最底层把上面的去掉,改成:1234/更改为自己定义的地图mymap=Map:create();mymap-InitMap(12.png,visibleSize);this-addChild(mymap,0);然后再改HelloWorldScene.cpp中的updata()事件:1234567891011121314151617181920212223242526272829303132333435363738voidHelloWorld:update(floatdelta)CCSizevisibleSize1=CCDirector:sharedDirector()-getVisibleSize();/判断是否按下摇杆及其类型switch(rocker-rocketDirection)case1:/hero-SetAnimation(attack1_animation.plist,attack1_animation.png,attack_,6,rocker-rocketRun);hero-SetAnimation(run_animation.plist,run_animation.png,run_,8,rocker-rocketRun);/run_为run_animation.png集合图片中每张图片的公共名称部分if(hero-getPositionX()JudgePositona(visibleSize1)|mymap-JudgeMap(hero,visibleSize1)/精灵没到达窗口中间位置或者地图已经移动到边缘了,精灵才可以移动,否则只播放动画hero-setPosition(ccp(hero-getPosition().x+1,hero-getPosition().y);/向右走/下面是移动地图mymap-MoveMap(hero,visibleSize1);break;case2:hero-SetAnimation(run_animation.plist,run_animation.png,run_,8,rocker-rocketRun);/run_为run_animation.png集合图片中每张图片的公共名称部分hero-setPosition(ccp(hero-getPosition().x,hero-getPosition().y+1);/向上走break;case3:hero-SetAnimation(run_animation.plist,run_animation.png,run_,8,rocker-rocketRun);/run_为run_animation.png集合图片中每张图片的公共名称部分if(hero-getPositionX()=8)/不让精灵超出左边,8可以改成你喜欢的hero-setPosition(ccp(hero-getPosition().x-1,hero-getPosition().y);/向左走break;case4:hero-SetAnimation(run_animation.plist,run_animation.png,run_,8,rocker-rocketRun);/run_为run_animation.png集合图片中每张图片的公共名称部分hero-setPosition(ccp(hero-getPosition().x,hero-getPosition().y-1);/向下走break;case0:hero-StopAnimation();/停止所有动画和运动break;if(btn-isTouch)hero-AttackAnimation(attack1_animation.plist,attack1_animation.png,attack_,6,rocker-rocketRun);这样就大功告成了,我们来看看效果:1. 首先,精灵向左运动的边缘时,不能再移动过去。2. 接下来,英雄向右移动到中间时(地图还没到最右边),地图移动,精灵只播放动画但不改变它的位置(相当于英雄一直在中间,但是地图移动了,造成英雄移动的错觉)3. 当地图移动到最右边时。地图不动了,英雄可以移动超过中间的位置效果就是这样了,原本是想弄成地图可以跟着精灵左右移动的,但是这个有点儿麻烦,还得判断左右,就偷了下懒,这里地图移动过去了就不能再移动回来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院感染预防控制方案
- 家庭教育方式与效果评价
- 一、客户及行政管理方案
- 跨国贸易合同磋商中的环境责任与可持续发展条款
- 离婚协议书中违约金支付与执行监督合同范本
- 某私立学校校园内停车设施管理与收费合同
- 离婚双方债务承担及共同房产处理协议书模板
- SET安全协议在在线游戏支付领域的实施合同
- 网络安全风险评估保密协议范本:保障网络安全
- 婚前财产协议及离婚后子女教育资助合同
- 五年级篮球培训课件
- 护林员巡护安全知识培训课件
- 辽宁省2025年中考英语真题附答案
- 喷涂基础知识培训课件
- 2025年驻外内聘考试题库
- 中铁四局工作汇报与战略规划
- 幼儿园教师防恐防暴安全知识培训
- 中国禁毒法课件
- 浅谈机关干部身心健康
- 湖南省多测合一收费指导标准(试行)2024年版
- 企业融资培训课件
评论
0/150
提交评论