《不靠谱2.x》005.CCLayer(上)CCTouchDelegate
一、CCTouch class CC_DLL CCTouch : public CCObject
{
public:
CCTouch()
: m_nId(0),m_startPointCaptured(false)
{}
CCPoint getLocation() const;
CCPoint getPreviousLocation() const;
CCPoint getStartLocation() const;
CCPoint getDelta() const;
//获得UI参考系下的坐标,即左上角为原点
CCPoint getLocationInView() const;
CCPoint getPreviousLocationInView() const;
CCPoint getStartLocationInView() const;
void setTouchInfo(int id,float x,float y)
{
m_nId = id;
m_prevPoint = m_point;
m_point.x = x;
m_point.y = y;
if (!m_startPointCaptured)
{
m_startPoint = m_point;
m_startPointCaptured = true;
}
}
/** * @js getId */
int getID() const
{
return m_nId;
}
private:
int m_nId;
bool m_startPointCaptured;
CCPoint m_startPoint;
CCPoint m_point;
CCPoint m_prevPoint;
};
1.CCTouch看名字就知道是触摸对象类,因此不出意外的都是和获得触摸位置相关的方法。 三、CCSet typedef std::set<CCObject *>::iterator CCSetIterator;
class CC_DLL CCSet : public CCObject
{
public:
CCSet(void);
CCSet(const CCSet &rSetObject);
virtual ~CCSet(void);
static CCSet * create();
CCSet* copy();
CCSet* mutableCopy();
int count();
void addObject(CCObject *pObject);
void removeObject(CCObject *pObject);
void removeAllObjects();
bool containsObject(CCObject *pObject);
CCSetIterator begin();
CCSetIterator end();
CCObject* anyObject();
virtual void acceptVisitor(CCDataVisitor &visitor);
private:
std::set<CCObject *> *m_pSet;
};
1.std::set作为容器显然应该具有这些方法:添加元素、获取元素、删除元素、插入元素、获取元素数目。基本上所有容器都应该有这些方法,即便没有也可以通过已知方法很方便地封装一个。然后再来看看源码,的确如此。 CCSetIterator iter = pTouches->begin();
for (; iter != pTouches->end(); iter++)
{
CCTouch* pTouch = (CCTouch*)(*iter);
//其他操作
}
四、CCTouchDelegate class CC_DLL CCTouchDelegate { public: CCTouchDelegate() {} virtual ~CCTouchDelegate() { } virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent); return false;}; // optional virtual void ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);} virtual void ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);} virtual void ccTouchCancelled(CCTouch *pTouch,CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);} // optional virtual void ccTouchesBegan(CCSet *pTouches,CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);} virtual void ccTouchesMoved(CCSet *pTouches,CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);} virtual void ccTouchesEnded(CCSet *pTouches,CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);} virtual void ccTouchesCancelled(CCSet *pTouches,CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);} };
1.通过注释可以知道这些代理方法都是可选的。 CCTargetedTouchDelegate源码如下: class CC_DLL CCTargetedTouchDelegate : public CCTouchDelegate { public: virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent) { CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);return false;}; // optional virtual void ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);} };
1.继承自CCTouchDelegate,截取了其中和单点触摸有关的四个方法。 CCStandardTouchDelegate源码如下: class CC_DLL CCStandardTouchDelegate : public CCTouchDelegate { public: // optional virtual void ccTouchesBegan(CCSet *pTouches,CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);} };
1.多点触摸,不多解释了。 五、总结: 1.了解了CCTouch、CCEvent和CCSet,为了解CCTouchDelegate打下基础。 2.了解了CCTouchDelegate提供了两类共八个回调接口。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |