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

cocos2d-x 注册iOS自带手势识别

2011-11-11 20:53 344 查看
猴子原创,转载请注明出处。谢谢!

原文地址:http://blog.csdn.net/yanghuiliu/article/details/6961048

现在项目中有涉及到手势识别的,其实我们可以直接利用ios自带的手势识别系统帮我们来识别。

看看实现:

我们要实现手势的类的头文件:

#include"GTGestureProtocol.h"

#include"RootViewController.h"
#include"FMGBGameData.h"
class  GTLevelMenu :publiccocos2d::CCLayer,publicGTGestureProtocol{
private:
   virtualvoid GTGestureTrigger(GTGestureDir dir);
};

在cpp中init方法中将自己传到RootViewController中。

RootViewController *root= (RootViewController*)(FMGBGameData::sharedFMGBGameData()->appRootViewController);
    root.delegate=this;

使用的时候:

voidGTLevelMenu::GTGestureTrigger(GTGestureDir dir)
{
//dir就是下面枚举的几个方向
}

不相关的代码我就不列出来了。

这里是一个layer,我想实现在这个layer上面实现手势监听。

GTGestureDir是一个代理,给iOS手势识别使用。GTGestureDir的实现:

typedefenum GTGestureDir
{
    GTGestureDirNONE = 0,
    GTGestureDirUP,
    GTGestureDirDOWN,
    GTGestureDirLEFT,
    GTGestureDirRIGHT,
}GTGestureDir;
class GTGestureProtocol
{
public:
   virtualvoid GTGestureTrigger(GTGestureDir dir){};
};
#endif

下面修改如何从ios手势识别中返回结果:

在iOS目录下修改RootViewController.h。加入我们的代理类

//
//
//  Created by Yanghui Liu on 11-10-14.
//  Copyright company 2011年. All rights reserved.
//
#import<UIKit/UIKit.h>

#include"GTGestureProtocol.h"
@interface RootViewController :UIViewController {
    
       GTGestureProtocol * delegate_;

}
@property (nonatomic,assign)GTGestureProtocol
* delegate;
@end

在RootViewController.mm中加入下面的手势识别:

-(void)handleGesture:(UISwipeGestureRecognizer *)recognizer { 
   if (recognizer.direction==UISwipeGestureRecognizerDirectionDown)

       if (delegate_) {
           delegate_->GTGestureTrigger(GTGestureDirDOWN);
        }
        
}
elseif(recognizer.direction==UISwipeGestureRecognizerDirectionUp)
{
        if (delegate_) {
            delegate_->GTGestureTrigger(GTGestureDirUP);
         }
}
elseif(recognizer.direction==UISwipeGestureRecognizerDirectionLeft)
{
       if (delegate_) {
           delegate_->GTGestureTrigger(GTGestureDirLEFT);
        }

}
elseif(recognizer.direction==UISwipeGestureRecognizerDirectionRight)
{
       if (delegate_) {
           delegate_->GTGestureTrigger(GTGestureDirRIGHT);
        }

}
}

最后还有一个单例返回的类没实现:
头文件

class FMGBGameData :publicCCObject {
    
public:
virtualbool init(void);
virtual ~FMGBGameData(void);
FMGBGameData(void);
/**单例FMGameApiRequest */
staticFMGBGameData* sharedFMGBGameData(void);
};

单例实现cpp

staticFMGBGameDatas_sharedData;
staticbool bFirstRun =true;
FMGBGameData::~FMGBGameData(void) {
}
FMGBGameData::FMGBGameData(){
}
FMGBGameData*FMGBGameData::sharedFMGBGameData(void) {
if (bFirstRun)
{
s_sharedData.init();
bFirstRun =false;
}
return &s_sharedData;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios interface layer class