cocos2dx3.2开发 RPG《Flighting》(七)回到战斗场景,更新角色的叠放次序

cocos2dx3.2开发 RPG《Flighting》(七)回到战斗场景,更新角色的叠放次序,第1张

概述一、前言 至此,我们的战斗场景关于角色移动已经讲得七七八八了。不过还是有一些问题需要注意注意。 二、正文 在第五节里面我们讲了FlightLayer里面有一个很重要的容器m_rolesArray,并且说道其初始化是由以下两个函数负责的。 void FlightLayer::initTeam(const HeroMessage& h1,const HeroMessage& h2,const Hero

一、前言

至此,我们的战斗场景关于角色移动已经讲得七七八八了。不过还是有一些问题需要注意注意。


二、正文

在第五节里面我们讲了FlightLayer里面有一个很重要的容器m_rolesArray,并且说道其初始化是由以下两个函数负责的。

voID FlightLayer::initTeam(const HeroMessage& h1,const HeroMessage& h2,const HeroMessage& h3){	Hero* hero1 = Hero::create(h1.r_name,this);	hero1->setposition(-100,380);	hero1->setDesPoint(Point(200,380));	hero1->initWithMessage(h1);	this->addRole(hero1);	Hero* hero2 = Hero::create(h2.r_name,this);	hero2->setposition(-100,260);	hero2->setDesPoint(Point(400,260));	hero2->initWithMessage(h2);	this->addRole(hero2);	Hero* hero3 = Hero::create(h3.r_name,this);	hero3->setposition(-100,140);	hero3->setDesPoint(Point(200,140));	hero3->initWithMessage(h3);	this->addRole(hero3);}voID FlightLayer::initMonsterDeq(deque<MonsterMessage> deq){	this->m_monsterDeq = deq;}

仔细看这两个函数,发现出现了两个新东西 Hero类和m_monsterDeq

其实Hero类就是Role的派生类,Monster也是Role的派生类。在将真正战斗的时候(而不是单单的行走),我们还会讲二者的区别。


假如你上一节已经能够成功地实现角色的控制移动,那么可能你会发现有一个很严重的问题,就是Role的Z轴次序并不会改变,导致越后addChild的Role越在上面。这很明显是不符合我们的要求的。我们的要求是根据Role的y坐标来判断谁在前谁在后。一般y坐标小的层次应该越高,以遮挡y坐标大的。

所以我们还需要作如下修改:

思路,在update函数里面判断m_rolesArray里面的每个role的y值,并且排好序,并且更新他们的z轴次序

voID FlightLayer::refreshLocalZOrder(){;	int max_z_order = m_rolesArray.size();	if(max_z_order <= 1){		return;	}	//sort(m_rolesArray.begin(),m_rolesArray.end(),bind(&FlightLayer::comparePosY,this,std::placeholders::_1,std::placeholders::_2));	m_rolesArray.sort(bind(&FlightLayer::comparePosY,std::placeholders::_2));		for(auto it = m_rolesArray.begin();it!=m_rolesArray.end();it++){		(**it)->setLocalZOrder(max_z_order--);	}}

comparePosY是一个比较的谓词(不懂std::List.sort的可以百度)
bool FlightLayer::comparePosY(Role_Ptr a,Role_Ptr b){	return ((*a)->getpositionY() < (*b)->getpositionY());}

这样子,我们的z轴次序就可以根据role的y坐标的改变而改变。达到我们的要求。


这节内容比较少,主要是交代完善好FlightLayer。

我的csdn地址:http://blog.csdn.net/hezijian22

邮箱地址:[email protected]

如有问题或指教,欢迎与我交流,谢谢。

总结

以上是内存溢出为你收集整理的cocos2dx3.2开发 RPG《Flighting》(七)回到战斗场景,更新角色的叠放次序全部内容,希望文章能够帮你解决cocos2dx3.2开发 RPG《Flighting》(七)回到战斗场景,更新角色的叠放次序所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1031061.html

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

发表评论

登录后才能评论

评论列表(0条)

保存