5. 터치 사건의 삼키기와 전달

5646 단어
터치 이벤트는cocos2d-x의 기초입니다.예를 들면 신인 가이드를 하는 것이다.아이템의 드래그.탄창의 차폐층.이와 같은 여러 가지.터치 이벤트를 할 때 시도해 보자는 마음으로 손을 대지 말고 반드시 철저하게 해야 한다. 그렇지 않으면 문제가 생기면 다시 시도해 보아라. 사실 시간이 더 많이 걸린다
사건을 터치할 때 주로 알아야 할 일
  • setSwallow Touches
  • 를 삼키는지 여부
  • onTouchBegin이 되돌아오는 의미
  • 코드는 다음과 같습니다.
    #include "HelloWorldScene.h"
    
    USING_NS_CC;
    
    Scene* HelloWorld::createScene()
    {
        auto scene = Scene::create();
        auto layer = HelloWorld::create();
        scene->addChild(layer);
        return scene;
    }
    bool HelloWorld::init()
    {
        if ( !Layer::init() )
        {
            return false;
        }
        Size winSize = Director::getInstance()->getWinSize();
        auto sprite = Sprite::create("HelloWorld.png");
        sprite->setPosition(Vec2(winSize.width / 2, winSize.height / 2 ));
        this->addChild(sprite, 0);
        m_nvShenSp = Sprite::create("nvshen.jpg");
        m_nvShenSp->setPosition(Vec2(winSize.width / 2, winSize.height / 2));
        this->addChild(m_nvShenSp);
    
        addTouchEvent();
        return true;
    }
    //      
    void HelloWorld::addTouchEvent(){
        auto dispatcher = Director::getInstance()->getEventDispatcher();
        auto listener1 = EventListenerTouchOneByOne::create();
        listener1->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
        listener1->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
        listener1->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
        listener1->setSwallowTouches(true);//      
        // Layer      
        dispatcher->addEventListenerWithSceneGraphPriority(listener1, this);
    };
    bool HelloWorld::onTouchBegan(Touch *touch, Event *unused_event){
        log("onTouchBegan");
        Point touchPoint = touch->getLocation();
        Rect nvShenRect = m_nvShenSp->getBoundingBox();//       ,       Rect  ,      Point
        if (nvShenRect.containsPoint(touchPoint)) //             (            layer        ,         )
        {
            return false;//false     ,     ,onTouchMoved,onTouchEnded    
        }
        return true; //             ,      ,     , onTouchMoved,onTouchEnded  
    };
    void HelloWorld::onTouchMoved(Touch *touch, Event *unused_event){
        log("onTouchMoved");
    };
    void HelloWorld::onTouchEnded(Touch *touch, Event *unused_event){
        log("onTouchEnded");
    };
    void HelloWorld::onTouchCancelled(Touch *touch, Event *unused_event){
    };
    
    

    좋은 웹페이지 즐겨찾기