博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d-x笔记 ccTouchesBegan、ccTouchesMoved、ccTouchesEnded
阅读量:7034 次
发布时间:2019-06-28

本文共 3836 字,大约阅读时间需要 12 分钟。

#ifndef __MUTITOUCHTEST_H__#define __MUTITOUCHTEST_H__#include "../testBasic.h"class MutiTouchTestLayer : public CCLayer{public:    bool init();    virtual void registerWithTouchDispatcher(void);    virtual void ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);    virtual void ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);    virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);    virtual void ccTouchesCancelled(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);    CREATE_FUNC(MutiTouchTestLayer)};class MutiTouchTestScene : public TestScene{ public:  virtual void runThisTest();};#endif /* __MUTITOUCHTEST_H__ */
//定义颜色数组static ccColor3B s_TouchColors[CC_MAX_TOUCHES] = {    ccYELLOW,    ccBLUE,    ccGREEN,    ccRED,    ccMAGENTA};
//定义点类class TouchPoint : public CCNode{public:    TouchPoint()    {        setShaderProgram(CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionTextureColor));    }    virtual void draw()    {        ccDrawColor4B(m_TouchColor.r, m_TouchColor.g, m_TouchColor.b, 255);        glLineWidth(10);        ccDrawLine( ccp(0, m_pTouchPoint.y), ccp(getContentSize().width, m_pTouchPoint.y) );        ccDrawLine( ccp(m_pTouchPoint.x, 0), ccp(m_pTouchPoint.x, getContentSize().height) );        glLineWidth(1);        ccPointSize(30);        ccDrawPoint(m_pTouchPoint);    }    void setTouchPos(const CCPoint& pt)    {        m_pTouchPoint = pt;    }    void setTouchColor(ccColor3B color)    {        m_TouchColor = color;    }    static TouchPoint* touchPointWithParent(CCNode* pParent)    {        TouchPoint* pRet = new TouchPoint();        pRet->setContentSize(pParent->getContentSize());        pRet->setAnchorPoint(ccp(0.0f, 0.0f));        pRet->autorelease();        return pRet;    }private:    CCPoint m_pTouchPoint;    ccColor3B m_TouchColor;};
//开启多点触控bool MutiTouchTestLayer::init(){    if (CCLayer::init())    {        setTouchEnabled(true);        return true;    }    return false;}//定义字典,用于管理点集static CCDictionary s_dic;
//注册标准触摸事件void MutiTouchTestLayer::registerWithTouchDispatcher(void){    CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);}
void MutiTouchTestLayer::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent){    CCSetIterator iter = pTouches->begin();    for (; iter != pTouches->end(); iter++)    {        CCTouch* pTouch = (CCTouch*)(*iter);        TouchPoint* pTouchPoint = TouchPoint::touchPointWithParent(this);        CCPoint location = pTouch->getLocation();        pTouchPoint->setTouchPos(location);        pTouchPoint->setTouchColor(s_TouchColors[pTouch->getID()]);        addChild(pTouchPoint);//将点对象及其id加到字典中        s_dic.setObject(pTouchPoint, pTouch->getID());    }    }
void MutiTouchTestLayer::ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent){    CCSetIterator iter = pTouches->begin();    for (; iter != pTouches->end(); iter++)    {        CCTouch* pTouch = (CCTouch*)(*iter);//通过id从字典中找出相应的点对象        TouchPoint* pTP = (TouchPoint*)s_dic.objectForKey(pTouch->getID());        CCPoint location = pTouch->getLocation();//然后赋值进去        pTP->setTouchPos(location);    }}
//清除点集void MutiTouchTestLayer::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent){    CCSetIterator iter = pTouches->begin();    for (; iter != pTouches->end(); iter++)    {        CCTouch* pTouch = (CCTouch*)(*iter);        TouchPoint* pTP = (TouchPoint*)s_dic.objectForKey(pTouch->getID());        removeChild(pTP, true);        s_dic.removeObjectForKey(pTouch->getID());    }}
//结束void MutiTouchTestLayer::ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent){    ccTouchesEnded(pTouches, pEvent);}void MutiTouchTestScene::runThisTest(){    MutiTouchTestLayer* pLayer = MutiTouchTestLayer::create();    addChild(pLayer, 0);    CCDirector::sharedDirector()->replaceScene(this);}

转载地址:http://bqjal.baihongyu.com/

你可能感兴趣的文章
建设优质手机网站必读
查看>>
搭建 nuget 私服及注意事项
查看>>
CoordinatorLayout和Behavior(一)
查看>>
[译] 用 Scikit-Learn 实现 SVM 和 Kernel SVM
查看>>
Support Async Tests with JavaScripts Promises through async await Our testing
查看>>
窥探SDWebImage
查看>>
Android6 0权限机制(三):6 0以前国产手机权限处理
查看>>
Linux 内核 101:NUMA架构
查看>>
推荐一个采用方便程序员在线动画学习常用算法的良心网站
查看>>
SQLServer之修改触发器
查看>>
如何使用SpringMvc处理Rest异常
查看>>
Golang学习笔记(二):五大声明语句
查看>>
springboot mybatis 项目框架源码 shiro 集成代码生成器 ehcache缓存
查看>>
【我读《Big Data》】引言部分--大数据,一场生活,工作,思维的变革
查看>>
Python 3 学习笔记之——基础语法
查看>>
Java反射 私有字段和方法
查看>>
AWS光缆被挖后对架构设计的一点总结(二)
查看>>
高性能MySQL读书笔记一
查看>>
用TableView实现分组列表展示
查看>>
排序(中_对数阶)
查看>>