Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了cocos2dx 3.x 屏幕触摸事件的认识大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

转自:http://blog.csdn.net/lengxue789/article/details/38296029


1. 屏幕触摸事件

EventListenerTouchOneByOne :单点触控

@H_262_12@
@H_673_20@
  • @H_874_22@std::function<bool(Touch*,Event*)>onTouchBegan;//触摸开始事件
  • @H_874_22@std::functionvoid(Touch*,0); BACkground-color:inherit; font-weight:bold">>onTouchMoved;//触摸移动事件
  • @H_874_22@std::function>onTouchEnded;//触摸结束事件
  • >onTouchCancelled;//触摸中断事件
  • EventListenerTouchAllAtOnce:多点触控

      void(conststd::vectorTouch*>&,0); BACkground-color:inherit; font-weight:bold">>onTouchesBegan;//触摸开始事件
    1. >onTouchesMoved;//触摸移动事件
    2. >onTouchesEnded;//触摸结束事件
    3. >onTouchesCancelled;//触摸中断事件
    下面是多点触摸的例子:
      @H_874_22@boolTouchTest::init()
    1. @H_874_22@{
    2. @H_874_22@if(!Layer::init())
    3. @H_874_22@returnfalse;
    4. @H_874_22@}
    5. @H_874_22@EventDispatcher*eventDispatcher=Director::geTinstance()->getEventDispatcher();
    6. @H_874_22@autolisten=EventListenerTouchAllAtOnce::create();
    7. @H_874_22@listen->onTouchesBegan=CC_CALLBACK_2(TouchTest::onTouchesBegan,this);
    8. @H_874_22@listen->onTouchesMoved=CC_CALLBACK_2(TouchTest::onTouchesMoved,this);
    9. >onTouchesEnded=CC_CALLBACK_2(TouchTest::onTouchesEnded,0); BACkground-color:inherit; font-weight:bold">>onTouchesCancelled=CC_CALLBACK_2(TouchTest::onTouchesCancelled,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px"> @H_874_22@eventDispatcher->addEventListenerWithSceneGraphpriority(listen,108); list-style:decimal-leading-zero outside; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_874_22@
    10. @H_874_22@returntrue;
    11. @H_874_22@}
    12. @H_874_22@
    13. @H_874_22@//触摸事件开始,手指按下时
    14. @H_874_22@voidTouchTest::onTouchesBegan(conststd::vector>&touches,cocos2d::Event*event)
    15. @H_874_22@for(auto&item:touches)
    16. @H_874_22@autotouch=item;
    17. @H_874_22@autopos1=touch->getLOCATIOn();
    18. @H_874_22@autopos2=touch->getLOCATIOnInView();
    19. @H_874_22@autopos3=Director::geTinstance()->convertToUI(pos2);
    20. @H_874_22@log("pos1x:%f,y:%f",pos1.x,pos1.y);
    21. @H_874_22@log("pos2x:%f,pos2.x,pos2.y);
    22. @H_874_22@log("pos2x:%f,pos3.x,pos3.y);
    23. @H_874_22@}
    24. @H_874_22@//触摸移动事件,也就是手指在屏幕滑动的过程
    25. @H_874_22@voidTouchTest::onTouchesMoved(conststd::vector:rgb(153,cocos2d::Event*event)
    26. @H_874_22@{
    27. @H_874_22@log("TouchTestonTouchesMoved");
    28. @H_874_22@//触摸事件结束,也就是手指松开时
    29. @H_874_22@voidTouchTest::onTouchesEnded(conststd::vector @H_874_22@log("TouchTestonTouchesEnded");
    30. @H_874_22@//打断触摸事件,一般是系统层级的消息,如来电话,触摸事件就会被打断
    31. @H_874_22@voidTouchTest::onTouchesCancelled(conststd::vector @H_874_22@log("TouchTestonTouchesCancelled");
    32. @H_874_22@}

    获取单击屏幕时的坐标方式:

    (1)touch->getLOCATIOn(); 获得单击坐标,基于3D

    (2)touch->getLOCATIOnInView(); 获取单击坐标,是屏幕坐标系的坐标

    (3)Director::geTinstance()->convertToUI(pos2); //将屏幕坐标系的坐标,转为cocos2dx的坐标

    坐标系:cocos2d-x是基于openGLES的,所以遵循openGL的坐标系,也就是说是以屏幕的左下角为坐标原点。屏幕坐标系一般是以左下角为坐标原点。


    2. 修改触控方式

    //设置多点触控

    this->setTouchMode(Touch::DispatchMode::all_AT_ONCE);

    //设置单点触控

    //this->setTouchMode(Touch::DispatchMode::ONE_BY_ONE);

    单点触控触摸监听代码:

      @H_874_22@this->setTouchMode(Touch::DispatchMode::ONE_BY_ONE);
    1. @H_874_22@autooneTouch=EventListenerTouchOneByOne::create();
    2. @H_874_22@oneTouch->onTouchBegan=CC_CALLBACK_2(TouchTest::onTouchBegan,108); list-style:decimal-leading-zero outside; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> @H_874_22@oneTouch->onTouchMoved=CC_CALLBACK_2(TouchTest::onTouchMoved,0); BACkground-color:inherit; font-weight:bold">>onTouchEnded=CC_CALLBACK_2(TouchTest::onTouchEnded,0); BACkground-color:inherit; font-weight:bold">>onTouchCancelled=CC_CALLBACK_2(TouchTest::onTouchCancelled,0); BACkground-color:inherit; font-weight:bold">>addEventListenerWithSceneGraphpriority(oneTouch,this);

    多点触控的触摸监听代码:

      @H_874_22@//设置多点触控
    1. @H_874_22@this->setTouchMode(Touch::DispatchMode::all_AT_ONCE);
    2. @H_874_22@autolisten=EventListenerTouchAllAtOnce::create();
    3. @H_874_22@eventDispatcher-:rgb(153,this);

    3. 屏蔽触摸向下传递

    listen->setSwallowTouches(true);

    setSwallowTouches用于设置是否吞没事件,也就是当某个触摸事件回调的时,截断该事件,让它不能继续传递给其他人。

    大佬总结

    以上是大佬教程为你收集整理的cocos2dx 3.x 屏幕触摸事件的认识全部内容,希望文章能够帮你解决cocos2dx 3.x 屏幕触摸事件的认识所遇到的程序开发问题。

    如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
    如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
    标签:33.xcocoscocos2dxdxx事件屏幕触摸认识
    猜你在找的Cocos2d-x相关文章
    其他相关热搜词更多
    phpJavaPython程序员load如何string使用参数jquery开发安装listlinuxiosandroid工具javascriptcap