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的命名空间。
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的命名空间。
相关文章推荐
- android 开发零起步学习笔记(十二):android监听事件添加动作的三种方式
- Cocoa学习笔记 Cocos2d 各种动作介绍 (下)
- Cocos2d-x学习笔记(3) - 动作
- cocos2d-x 2.X demo学习笔记 9 ----Touches 触摸事件 以及碰撞检测
- cocos2d-x学习笔记09:动作2:持续动作
- cocos2d-x学习笔记-CCAction(动作)
- cocos2d-x学习笔记09:动作2:持续动作
- cocos2d-x学习笔记-CCAction(动作)
- Cocoa学习笔记 Cocos2d 各种动作介绍 (上)
- cocos2d-x学习笔记-CCAction(动作)
- cocos2d-x学习笔记-CCAction(动作)---Alex Zhou 的程序世界
- cocos2d-x学习笔记13:动作4:其他动作
- flex学习笔记 在任意地方监听事件
- cocos2d-x 2.X demo学习笔记 6 ----ClickAndMoveTest 触摸事件和移动
- Flex 监听键盘事件(学习笔记)
- 事件监听-学习笔记
- 事件监听-学习笔记
- Cocoa学习笔记 Cocos2d 各种动作介绍 (下)
- cocos2d-x学习笔记-触屏事件详解
- cocos2d-x学习笔记 动作 CCCallFunc家族(回调函数包装器)