zoukankan      html  css  js  c++  java
  • 「cocos2dx」瓦片地图学习之地图滚动及触摸事件处理

    cocos2d支持2中触摸事件处理机制:CCStandardTouchDelegate和CCTargetedTouchDelegate,分别用来处时单点触摸和多点触摸事件的处理。

    CCLayer被设计用来接收用户输入,它是CCNode的子类,与CCNode类相比,只是添加了触摸及重力计等用户输入事件的处理功能,用户输入事件默认是关闭的,以下是分别开启多点及单点触摸事件处理的方法:

    • 在CCLayer中可以用setTouchEnabled(true)会开启多点触摸功能,多点触摸也是CCLayer的默认模式。
    • 使用CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,true); 可以开启CCLayer的单点触摸功能。

    在触摸功能开启后需要重写触摸事件处理方法,多点触摸事件的方法为:

    virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
    virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
    virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);
    virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);

    单点触摸事件处理方法为:

        //重写单点触屏处理事件
        virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
        virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); 
        virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); 
        virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);     //返回true则触摸点不再传递,false的话继续传递
        //void registerWithTouchDispatcher(void);

    void registerWithTouchDispatcher(void);可以设置触摸事件的优先级,如果针对层的触摸事件接收不了,可能是被其他层截取了,可以用以下方法设置优先级:

     void HelloWorld::registerWithTouchDispatcher(void)
     
     {
     
     CCDirector* pDirector = CCDirector::sharedDirector();
     
     pDirector->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority + 1, true);
     
     }

    触摸事件获取到的坐标系是以左上角为原点的,而openGL是以左下角为原点的,所以需要把获取到的坐标转换为openGL坐标系:

        //获取点在视图中的坐标(左上角为原点)
        CCPoint touchLocation = pTouch->getLocationInView();
        // 把点的坐标转换成OpenGL坐标(左下角为原点)
        touchLocation = CCDirector::sharedDirector()->convertToGL(touchLocation);
        // 把OpenGL的坐标转换成CCLayer的坐标
        CCPoint local = convertToNodeSpace(touchLocation)
        // 大小为100x100,坐标为(0, 0)的矩形

    本文中瓦片地图滚动的参考资料为:http://blog.csdn.net/akof1314/article/details/8474232

    效果显示视频:http://www.56.com/u41/v_OTE1ODkxOTg.html

  • 相关阅读:
    垂直的SeekBar:VerticalSeekBar
    android 获取路径目录方法以及判断目录是否存在,创建目录
    JSON
    列表和导航
    【前端积累】链接
    【前端积累】背景图像和背景替换
    【前段积累】可视化模型
    【前端积累】选择器
    银联支付-产品测试sdk使用流程
    【CSS系列】块级元素和行内元素
  • 原文地址:https://www.cnblogs.com/awakenjoys/p/cocos2d_tile.html
Copyright © 2011-2022 走看看