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

玩家的飞机直接用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) ;



 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值