cocos2dx源码:popup实现

前端之家收集整理的这篇文章主要介绍了cocos2dx源码:popup实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

文件Popup.h

@H_403_2@#ifndef _POPUP_H_ #define _POPUP_H_ #include "cocos2d.h" #include "GmbsCocos.h" #include "ui/CocosGUI.h" USING_NS_CC; class Popup : public LayerColor { //typedef std::function<void(void)> showEnd_t; public: Popup(); ~Popup(); bool create(Size &size,const char* bgFileName,bool autorelease = true); virtual bool init(); void show(float seconds,bool removedWhenShowEnd = true,std::function<void(void)> showEndCallback = nullptr); void show01(float seconds,std::function<void(void)> showEndCallback = nullptr); void showEnd(); void showWithAction(ActionInterval* action,bool removedWhenShowEnd,std::function<void(void)> showEndCallback); void setVisible(bool visible); void setHideCallback(std::function<void(void)> showEndCallback) { m_showEndCallback = showEndCallback; } void setHideWhenTouch(bool hideWhenTouch) { m_hideWhenTouch = hideWhenTouch; } protected: virtual bool onTouchBegan(Touch *pTouch,Event *pEvent); EventListenerTouchOneByOne* m_touchListener; ui::Scale9Sprite* m_background; std::function<void(void)> m_showEndCallback; bool m_removedWhenShowEnd; bool m_hideWhenTouch; }; #endif

文件Popup.cpp

@H_403_2@#include "Popup.h" Popup::Popup() { m_touchListener = nullptr; m_showEndCallback = nullptr; m_hideWhenTouch = false; m_removedWhenShowEnd = false; } Popup::~Popup() { } bool Popup::create(Size &size,bool autorelease) { if (!this->initWithColor(Color4B(0,0,0))) return false; if (autorelease) this->autorelease(); this->setContentSize(size); m_background = nullptr; if (bgFileName != nullptr) { GmbsPoint pt; m_background = ui::Scale9Sprite::create(bgFileName); this->addChild(m_background); m_background->setAnchorPoint(Vec2(0.5,0.5)); m_background->setContentSize(size); m_background->setColor(Color3B(255,133,52)); m_background->setOpacity(220); pt.reset(m_background); pt.xMiddleAlign(this).yMiddleAlign(this); m_background->setPosition(pt); Size frameSize(size.width + 4,size.height + 4); ui::Scale9Sprite* frame = ui::Scale9Sprite::create(bgFileName); this->addChild(frame,-1); frame->setAnchorPoint(Vec2(0.5,0.5)); frame->setContentSize(frameSize); frame->setColor(Color3B(255,255,255)); pt.reset(frame); pt.xMiddleAlign(m_background).yMiddleAlign(m_background); frame->setPosition(pt); } setVisible(true); return this->init(); } bool Popup::init() { return true; } void Popup::setVisible(bool visible) { if (visible && !m_touchListener) { m_touchListener = EventListenerTouchOneByOne::create(); m_touchListener->onTouchBegan = CC_CALLBACK_2(Popup::onTouchBegan,this);; m_touchListener->setSwallowTouches(true); _eventDispatcher->addEventListenerWithSceneGraPHPriority(m_touchListener,this); } else if (!visible && m_touchListener) { _eventDispatcher->removeEventListener(m_touchListener); m_touchListener = nullptr; } LayerColor::setVisible(visible); } bool Popup::onTouchBegan(Touch *pTouch,Event *pEvent) { if (m_hideWhenTouch) { Size size = getContentSize(); Rect boundingRect(0,size.width,size.height); Point touchPoint = convertTouchToNodeSpace(pTouch); if (!boundingRect.containsPoint(touchPoint)) { showEnd(); } } return true; } void Popup::show(float seconds,std::function<void(void)> showEndCallback) { auto action = Sequence::create( DelayTime::create(seconds),CallFunc::create(CC_CALLBACK_0(Popup::showEnd,this)),nullptr); this->showWithAction(action,removedWhenShowEnd,showEndCallback); } void Popup::show01(float seconds,std::function<void(void)> showEndCallback) { setScale(0); auto action = Sequence::create( ScaleTo::create(0.8f,1.25f),DelayTime::create(seconds),showEndCallback); } void Popup::showWithAction(ActionInterval* action,std::function<void(void)> showEndCallback) { this->stopActionByTag(1); action->setTag(1); this->runAction(action); setVisible(true); m_removedWhenShowEnd = removedWhenShowEnd; m_showEndCallback = showEndCallback; } void Popup::showEnd() { setVisible(false); if (m_showEndCallback) m_showEndCallback(); if (m_removedWhenShowEnd) this->removeFromParent(); }

猜你在找的Cocos2d-x相关文章