飞机大战开发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) ; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |