您的位置:首页 > 移动开发 > Cocos引擎

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

2014-11-09 22:40 441 查看
动作由动作对象CCSprite类通过执行runAction函数,各种动作事件在CCActionInstant.h中有定义。很多事件如CCMoveTo、CCMoveBy这些是一一对应的,尾缀为“To”的是变化到指定的值,尾缀“By”是在x、y方向上执行对应的距离。

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的命名空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: