
Map类改变的最少,直接贴代码了
Map.h
//// Map.h// fight//// Created by Cytzrs on 15/2/3.////#ifndef __fight__Map__#define __fight__Map__#include <iostream>#include "cocos2d.h"USING_NS_CC;class IMap:public Node{public: IMap(); ~IMap(); //初始化地图,window_sizeo为控制台大小 voID InitMap(const char *map_name,const Size &window_size); //根据精灵的位置移动地图,visibleSize为当前窗口的大小 voID MoveMap(Node *hero,Size visibleSize); //判断地图是否到达边缘 bool JudgeMap(Node *hero,Size visibleSize); //virtual voID update(float delta); CREATE_FUNC(IMap); private: Sprite *m_map;//地图精灵 };#endif /* defined(__fight__Map__) */Map.cpp //// Map.cpp// fight//// Created by Cytzrs on 15/2/3.////#include "Map.h"IMap::IMap():m_map(NulL){ }IMap::~IMap(){ }voID IMap::InitMap(const char *map_name,const Size &window_size){ this->m_map=Sprite::create(map_name); m_map->setAnchorPoint(Vec2(0,0));//设置锚点 this->setAnchorPoint(Vec2(0,0));//设置锚点 this->addChild(m_map); }voID IMap::MoveMap(Node *hero,Size visibleSize)//{ if(hero->getpositionX()==visibleSize.wIDth/2)//精灵运动到中间,地图才移动 { if(this->getpositionX()!=-(m_map->getContentSize().wIDth-visibleSize.wIDth))//防止地图左边运动后超出边缘 this->setposition(this->getpositionX()-1,this->getpositionY()); }}bool IMap::JudgeMap(Node *hero,Size visibleSize){ if(this->getpositionX()!=-(m_map->getContentSize().wIDth-visibleSize.wIDth))//防止地图左边运动后超出边缘 return false; else //地图已经移动到达边缘 return true;} 最后,当然我们需要在Scene中添加IMap对象,然后再update中检测hero和map的的位置关系,以决定是hero移动呢还是map移动,
从而实现地图无限滚动的效果。
mymap=IMap::create(); mymap->InitMap("12.png",visibleSize); this->addChild(mymap,0);将update修改为: voID HelloWorld::update(float delta){ Size visibleSize1 = Director::getInstance()->getVisibleSize(); //判断是否按下摇杆及其类型 switch(rocker->rocketDirection) { case 1: //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()<=visibleSize1.wIDth-8)//不让精灵超出右边,8可以改成你喜欢的 { if(!hero->JudgePositona(visibleSize1)||mymap->JudgeMap(hero,visibleSize1))//精灵没到达窗口中间位置或者地图已经移动到边缘了,精灵才可以移动,否则只播放动画 hero->setposition(Vec2(hero->getposition().x+1,hero->getposition().y)); //向右走 //下面是移动地图 mymap->MoveMap(hero,visibleSize1); } break; case 2: hero->SetAnimation("run_animation.pList",rocker->rocketRun);//"run_"为run_animation.png集合图片中每张图片的公共名称部分 hero->setposition(Vec2(hero->getposition().x,hero->getposition().y+1)); //向上走 break; case 3: hero->SetAnimation("run_animation.pList",rocker->rocketRun);//"run_"为run_animation.png集合图片中每张图片的公共名称部分 if(hero->getpositionX()>=8)//不让精灵超出左边,8可以改成你喜欢的 hero->setposition(Vec2(hero->getposition().x-1,hero->getposition().y)); //向左走 break; case 4: hero->SetAnimation("run_animation.pList",hero->getposition().y-1)); //向下走 break; case 0: hero->StopAnimation();//停止所有动画和运动 break; } if(attackBtn->isHighlighted()) { hero->AttackAnimation("attack1_animation.pList",rocker->rocketRun); log("-------------------_____________"); }}
以上是内存溢出为你收集整理的Cocos2d-X 3.4版-地图无限滚动与边缘检测《赵云要格斗》全部内容,希望文章能够帮你解决Cocos2d-X 3.4版-地图无限滚动与边缘检测《赵云要格斗》所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)