Cocos2d – x学习笔记[3] 动作及其监听、触屏事件

来源:互联网 发布:邪恶少女漫画软件 编辑:程序博客网 时间:2024/05/22 09:04

动作由动作对象CCSprite类通过执行runAction函数,各种动作事件在CCActionInstant.h中有定义。很多事件如CCMoveToCCMoveBy这些是一一对应的,尾缀为“To”的是变化到指定的值,尾缀“By”是在xy方向上执行对应的距离。

CCAction是所有动作类的父类,可以调用其子类动作的create函数去初始化CCAction类的指针。CCAction中还有一些特殊的类,如CCSpawn(将所有动作一起播放)和CCSequence(逐个播放动作),还有CCRepeat(可指定次数)、CCRepeatForever,以及进行动作监听的CCCallFunc(他也是一个动作,同时也是一个回调函数)。CCAction中提供了各种动作,这些动作都能通过精灵类的runAction执行,查看源文件动手敲一敲代码会更好。

 

Cocos2dx中的触屏事件

//开始、手指按下时

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 );

 

这些复数形式(touches)的触屏函数,代表触摸的消息传递给各个层。也存在单数形式的函数,他们只针对某个层。

 

项目中如果需要实现触摸功能就使其继承CCLayer,因为CCLayer继承自 CCTouchDelegate,实际上我们真正去触屏的时候就是对图层的操作。

实现触屏操作前,需要先对场景进行设置,即

Scene -> setTouchEnabled(true);

 

我在看书时看到这一句:

void HelloWorld::ccTouchesBegan(CCSet* pTouches,CCEvent* pEvent)

{

CCTouch* touch = (CCTouch*)pTouch->anyObject();

CCPoint pos1 = touch->getLocation();

CCPoint pos2 = touch->getLocationInView();

CCPoint pos3 = CCDirector::sharedDirector()->convertToGL(pos);

}

这里涉及到了三种获取触摸坐标的方法。

·touch->getLocation()

获得基于3D的坐标。

·touch->getLocationInView()

获取视图中的坐标,即2D坐标。

 ·CCDirector::sharedDirector()->convertToGL(pos)

基于cocos2dx的坐标。

 

 CCSet是基于C++中的STL实现的,他的成员函数anyObject返回一个CCObject* CCSet类中的函数都维护一个set<CCObject *> *m_pSet

 

这是以上代码段运行结果的一部分:

pos1: x = 788.742126 , y = 309.037750 
pos2: x = 789.000000 , y = 331.000000 
pos3: x = 788.742126 , y = 309.037750 

可以看出,不同的方法,转换的结果是不一样的。 


我在调试时遇到了语法错误: 标识符“CCSet”的错误,后来发现是忘记引入cocos2d的命名空间。

0 0
原创粉丝点击