cocos2d-x的触摸输入
来源:互联网 发布:vb.net 十秒后跳转 编辑:程序博客网 时间:2024/05/21 14:49
CCLayer的一个重要作用就是接受用户的输入,自身已经封装好了触摸接口,只需要将TouchEnable属性设置为true就可以开启。开启以后需要重载4个函数,他们是
virtual void ccTouchesBegan(CCSet *pTouches, CCEvent*pEvent);
virtual voidccTouchesMoved(CCSet *pTouches, CCEvent*pEvent);
virtual voidccTouchesEnded(CCSet *pTouches, CCEvent*pEvent);
virtual voidccTouchesCanCelled(CCSet *pTouches, CCEvent*pEvent);
分别代表触摸开始,移动,结束,取消(在触摸过程中程序被切到后台)。通过这4个函数来实现自己的逻辑。
这个方法是在《制作自己的捕鱼达人》看到的,觉得比第一种方法好很多,把触摸类型判断逻辑和游戏元素的处理逻辑分开,非常方便代码管理。首先需要实现一个TouchLayer,它实现对触摸类型的判断(单点,多点,移动),内部还有一个代理类,代码如下
#ifndef TOUCHLAYER_H
#define TOUCHLAYER_H
#include "cocos2d.h"
#include "proj.win32\TouchLayerDelegate.h"
class TouchLayer:public cocos2d::CCLayer
{
public:
CC_SYNTHESIZE(TouchLayerDelegate*,m_pDelegate,Delegate);
public:
bool init();
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);
void onExit();
CREATE_FUNC(TouchLayer);
};
#endif
void TouchLayer::ccTouchesEnded(CCSet* pTouches,CCEvent*pEvent)
{
if(pTouches->count() == 1)
{
CCTouch* touch = dynamic_cast(pTouches->anyObject());
CCPoint position = touch->getLocationInView();
if(this->getDelegate())
{
this->getDelegate()->singleTouchEndIn(position);
}
}
}
然后我们需要一个代理类TouchLayerDelegate。 TouchLayerDelegate 相当于一个协议,本身没有什么逻辑。任何一个实现了这个协议的类都可以作为TouchLayer的代理,代码如下
#ifndef TOUCHLAYERDELEGATE_H
#define TOUCHLAYERDELEGATE_H
#include "cocos2d.h"
class TouchLayerDelegate
{
public:
virtual void singleTouchEndIn(cocos2d::CCPoint point) =0;
};
#endif
我们的最终目的是操纵精灵,所以我们让精灵层实现这个代理协议。让精灵层继承TouchLayerDelegate并重载其中的全虚函数。代码如下:
class SpriteLayer: public cocos2d::CCLayer,publicTouchLayerDelegate
{
public:
bool init();
void singleTouchEndIn(cocos2d::CCPoint point);
private:
SprBg* background;
SprCowboy* cowboy;
};
#endif
于是我们就可以在重载的函数里实现我们的操作。
最后的最后,我们需要添加一条语句,把精灵层设置为触摸层的代理层
//把精灵层设置为触摸层的代理层
this->touchLayer->setDelegate(this->spriteLayer);
这一句一般放在场景的初始化函数中。
总结:
0 0
- cocos2d-x的触摸输入
- cocos2d-x的触摸输入
- cocos2d-x的触摸响应
- cocos2d-x带触摸控制与光标输入框
- cocos2d-x的触摸消息分发机制
- cocos2d-x的CCLayer触摸事件
- cocos2d-x的两种触摸事件
- Cocos2d-x 缩放以后的触摸判断
- cocos2d-x中的多点触摸的问题
- cocos2d-x之触摸的响应
- cocos2d-x 3.0 触摸机制的使用
- cocos2d-x 触摸事件的重新分发
- cocos2d-x的两种触摸事件
- cocos2d-x 3.0 触摸机制的使用
- cocos2d-x 3.0触摸机制的用法
- Cocos2d-x实现用户触摸的功能
- cocos2d-x 多点触摸
- Cocos2d-x 单点触摸
- Hadoop第七讲(1)
- 源创通信与富士康联手开展banana pi 香蕉派开源硬件活动
- Remove Nth Node From End of List
- cocos2d-x实现背景无限循环
- cocos2d-x中动作类Action的2个常犯…
- cocos2d-x的触摸输入
- cocos2d-x中CCCallFunc系列动作
- cocos2d-x内存管理初步窥探之retai…
- cocos2d-x 使用 cocostu…
- coco2dx使用控制台输出LOG信息
- unity3D中阴影渲染的shadow a…
- Unity3D中的Grobal Illuminit…
- Unity3D中摄像机常用技巧Dolly&nbs…
- The Zen of Python / Python之禅