CControlLayer

#ifndef __CONTROLLAYER_H__
#define __CONTROLLAYER_H__

#include "XWidget.h"

class CMapDialog;
class CXTimer;
class CTowerDialog;

class CControlLayer : public CXWidget
{
public:
    enum ControlLayerId
    {
        _IDD_ControLyaer = 102,
    };
public:
    CControlLayer();
    ~CControlLayer();

    virtual bool init();

    virtual bool onMouseDown(CCTouch *pTouch, CCEvent *pEvent);
    virtual void onMouseUp(CCTouch *pTouch, CCEvent *pEvent);
    virtual    void onMouseMove(CCTouch *pTouch, CCEvent *pEvent);

    void onTimerEnd(CCObject* obj);
private:
    int                    m_nTimerCount;
    bool                m_bDblclick;

    CCPoint                m_tMoveDist;
    CMapDialog*            m_pMapDlg;
    CXTimer*            m_pTimer;
    CTowerDialog*        m_pTowerDlg;

};

#endif
#include "ControlLayer.h"
#include "WidgetMgr.h"
#include "GameLogic.h"
#include "MapDialog.h"
#include "XTimer.h"
#include "Dispatcher.h"

CControlLayer::CControlLayer()
{
    m_tMoveDist.setPoint(0, 0);
    m_pMapDlg = NULL;
    m_bDblclick = false;
    m_pTimer = NULL;
    m_pTowerDlg = NULL;
}


CControlLayer::~CControlLayer()
{

}

bool CControlLayer::init()
{
    CWidgetMgr::getInstance()->loadWidget(this, _IDD_ControLyaer);
    CWidgetMgr::getInstance()->addWnd(this);

    this->setTouchEnabled(true);

    m_pTimer = new CXTimer();
    m_pTimer->init(3, 0.1f);
    m_pTimer->autorelease();
    this->addChild(m_pTimer);
    m_pTimer->setTimerEndListener(this, callfuncO_selector(CControlLayer::onTimerEnd));

    return true;
}

bool CControlLayer::onMouseDown( CCTouch *pTouch, CCEvent *pEvent )
{
    CCPoint tMouseDownPos = pTouch->getLocationInView();
    tMouseDownPos = CCDirector::sharedDirector()->convertToGL(tMouseDownPos);
    tMouseDownPos = this->convertToNodeSpace(tMouseDownPos);


    CDispatcher::getInstance()->onMoveDown(tMouseDownPos);


    if (m_bDblclick) 
    {//双击
        if (1.0f == CDispatcher::getInstance()->getWorldScale())
        {
            CDispatcher::getInstance()->setWorldScale(1.5f);
        }
        else
        {
            CDispatcher::getInstance()->setWorldScale(1.0f);
        }
    }


    if (m_pTimer)
    {
        m_pTimer->setCount(3);
        m_pTimer->start();
        m_bDblclick = true;
    }

    return true;
}

void CControlLayer::onMouseUp( CCTouch *pTouch, CCEvent *pEvent )
{
    CCPoint tMouseUpPos = pTouch->getLocationInView();
    tMouseUpPos = CCDirector::sharedDirector()->convertToGL(tMouseUpPos);
    tMouseUpPos = this->convertToNodeSpace(tMouseUpPos);


}

void CControlLayer::onMouseMove( CCTouch *pTouch, CCEvent *pEvent )
{    
    CCPoint moveCurPos = pTouch->getLocationInView();    
    moveCurPos = CCDirector::sharedDirector()->convertToGL(moveCurPos);
    moveCurPos = this->convertToNodeSpace(moveCurPos);
    CCPoint movePrevPos = pTouch->getPreviousLocationInView();
    movePrevPos = CCDirector::sharedDirector()->convertToGL(movePrevPos);
    movePrevPos = this->convertToNodeSpace(movePrevPos);

    m_tMoveDist.setPoint(moveCurPos.x - movePrevPos.x, moveCurPos.y - movePrevPos.y);    

    CDispatcher::getInstance()->onMoveDist(m_tMoveDist);

}

void CControlLayer::onTimerEnd( CCObject* obj )
{
    m_bDblclick = false;
}
原文地址:https://www.cnblogs.com/newlist/p/3165231.html