Cocos2d-X 3.4版-地图无限滚动与边缘检测《赵云要格斗》

Cocos2d-X 3.4版-地图无限滚动与边缘检测《赵云要格斗》,第1张

概述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 IMa

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("-------------------_____________");    }}




PS:多写博客,帮助自己,方便他人! 总结

以上是内存溢出为你收集整理的Cocos2d-X 3.4版-地图无限滚动与边缘检测《赵云要格斗》全部内容,希望文章能够帮你解决Cocos2d-X 3.4版-地图无限滚动与边缘检测《赵云要格斗》所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1037463.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存