加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

飞机大战开发02之添加玩家飞机

发布时间:2020-12-14 20:49:05 所属栏目:百科 来源:网络整理
导读:玩家的飞机直接用 Sprite 来创建 代码: GameLayer.h Sprite * m_pPlayerPlane ; GameLayer.cpp m_pPlayerPlane = Sprite::create("myPlane.png") ;m_pPlayerPlane-setPosition(Vec2(screenSize.width / 2,screenSize.height / 2)) ;addChild(m_pPlayerPlane

玩家的飞机直接用Sprite来创建

代码:

GameLayer.h

Sprite * m_pPlayerPlane ;

GameLayer.cpp

m_pPlayerPlane = Sprite::create("myPlane.png") ;
m_pPlayerPlane->setPosition(Vec2(screenSize.width / 2,screenSize.height / 2)) ;
addChild(m_pPlayerPlane,ZORDER_PLAYER) ;

为游戏中的元素分层,这个是很必要的,所以,添加了zOrder

GameLayer.h

static const int ZORDER_BG = 0 ;
static const int ZORDER_PLAYER = 10 ;

实现飞机的移动:

通过点击事件实现了飞机的移动,同时,限制飞机不能出屏幕。

        auto lisener = EventListenerTouchOneByOne::create() ;
	lisener->onTouchBegan = [&](Touch *toch,Event * event)
	{
		auto target = dynamic_cast<Layer*>(event->getCurrentTarget()) ;
		auto loction = target->convertToNodeSpace(toch->getLocation()) ;
		m_touchBeginPos = loction ;
		return true ;
	} ;
	lisener->onTouchMoved = [&](Touch *toch,Event * event)
	{
		auto target = dynamic_cast<Layer*>(event->getCurrentTarget()) ;
		auto loction = target->convertToNodeSpace(toch->getLocation()) ;
		m_touchMovePos = loction ;
		Vec2 var = m_touchMovePos - m_touchBeginPos ;
		Vec2 pos = m_pPlayerPlane->getPosition() + var ;
		m_pPlayerPlane->setPosition(pos) ;
		if (m_pPlayerPlane->getPositionX() < m_pPlayerPlane->getBoundingBox().size.width / 2)
		{
			m_pPlayerPlane->setPositionX(m_pPlayerPlane->getBoundingBox().size.width / 2) ;
		}
		if (m_pPlayerPlane->getPositionX() > Director::getInstance()->getWinSize().width - m_pPlayerPlane->getBoundingBox().size.width / 2)
		{
			m_pPlayerPlane->setPositionX(Director::getInstance()->getWinSize().width - m_pPlayerPlane->getBoundingBox().size.width / 2) ;
		}
		if (m_pPlayerPlane->getPositionY() < m_pPlayerPlane->getBoundingBox().size.height / 2)
		{
			m_pPlayerPlane->setPositionY(m_pPlayerPlane->getBoundingBox().size.height / 2) ;
		}
		if (m_pPlayerPlane->getPositionY() > Director::getInstance()->getWinSize().height - m_pPlayerPlane->getBoundingBox().size.height / 2)
		{
			m_pPlayerPlane->setPositionY(Director::getInstance()->getWinSize().height - m_pPlayerPlane->getBoundingBox().size.height / 2) ;
		}
		m_touchBeginPos = loction ;
	} ;
	lisener->onTouchEnded = [&](Touch *toch,Event * event)
	{
		m_touchBeginPos = Vec2(0,0) ;
		m_touchMovePos = Vec2(0,0) ;
	} ;
	_eventDispatcher->addEventListenerWithSceneGraphPriority(lisener,this) ;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读