转自:http://blog.sina.com.cn/s/blog_61ece099010187tl.html

手势之前也发过一篇,但是我感觉那个还不够轻巧。 而且大多数游戏里面不会有那么复杂的手势,今天给大家分享下只有简单方向、圆形手势的代码。

virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
   virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
   virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);

首先cocos2d中是通过以上三个方法判断玩家的触摸事件。 直接贴代码, 大家看后原理就知道了, 很简单。 就是通过水平、垂直的运动增量判断它的运行方向。

头文件

enum GDirection        //当前手势方向;
{
  kGDirectionUp = ,
  kGDirectionDown,
  kGDirectionLeft,
  kGDirectionRight,
  kGDirectionNo
}; bool b_click; //判断当前是否是单击;
bool b_debug; //调试用;
bool b_circle; //其实这个圆形的判断不是很精确;
bool cache_directionshape[]; //方向缓存,move中用它来判断是否是单向手势 GDirection gd_direction; //手势方向;
CCPoint ccp_last,ccp_now; //记录起始、当前坐标

处理cocos2d的触摸事件

void GeometricDirection::onStarted(CCSet *pTouches, CCEvent *pEvent)
{
  CCTouch *touch = (CCTouch *) pTouches->anyObject();
  ccp_last = touch->locationInView(touch->view());
  ccp_last = CCDirector::sharedDirector()->convertToGL(ccp_last);   b_click = true;
  b_circle = false;
  gd_direction = kGDirectionNo;   for (int i = ; i < ; i++)
  {
    cache_directionshape[i] = false;
  }
}
void GeometricDirection::onMoved(CCSet *pTouches, CCEvent *pEvent)
{
  b_click = false;
  CCTouch * touch = (CCTouch*)pTouches->anyObject();
  ccp_now = touch->locationInView(touch->view());
  ccp_now = CCDirector::sharedDirector()->convertToGL(ccp_now);
  float adsx = ccp_now.x - ccp_last.x;
  float adsy = ccp_now.y - ccp_last.y;   if(abs(adsx) > abs(adsy)) //X方向增量大
  {
    if(adsx < ) //左移;
      cache_directionshape[] = ;
    else
      cache_directionshape[] = ;
  }
  else
  {
    if(adsy < )
      cache_directionshape[] = ;
    else
      cache_directionshape[] = ;
  }
  int x = ;
  for (int i = ; i< ; i++)
  {
    if(cache_directionshape[i])
      x++;
  }
  if(x >= )
    b_circle = true;
} void GeometricDirection::onEnded(CCSet *pTouches, CCEvent *pEvent)
{
  //圆形;
  if(b_circle || b_click) {
    return;
  }   float adsx = ccp_now.x - ccp_last.x;
  float adsy = ccp_now.y - ccp_last.y;
  if(abs(adsx) > abs(adsy)) //X方向增量大
  {
    if(adsx < ){
      gd_direction = kGDirectionLeft;
    }
    else{
      gd_direction = kGDirectionRight;
    }
  }
  else
  {
    if(adsy < ){
      gd_direction = kGDirectionDown;
    }
    else{
      gd_direction = kGDirectionUp;
    }
  }   //调试信息;
  //debug();
}

cocos2d-x 手势之简单实现的更多相关文章

  1. cocos2d 消除类游戏简单的算法 (一)

    1. 游戏视频演示 2.三消游戏我的理解 上面视频中的游戏.我做了2个星期时间,仅仅能算个简单Demo,还有bug.特效也差点儿没有.感觉三消游戏主要靠磨.越磨越精品. 市场上三消游戏已经超级多了.主 ...

  2. iOS边练边学--UIGestureRecognizer手势识别器简单介绍

    iOS 3.2之后,苹果退出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度. 一.UIGestureRecognizer UIGestureRe ...

  3. (转 部分修改) IOS 手势密码(简单版)

    // // Created by wangtouwang on 15/4/7. // Copyright (c) 2015年 wangtouwang. All rights reserved. // ...

  4. iOS的触摸事件的用法以及和手势识别器的区别

    1.首先来介绍下触摸事件和手势识别器的利与弊 触摸事件和手势识别器二者之间有直接的关系 手势识别器是在触摸事件的基础上演变过来的 当我们用到触摸事件时 默认的uiview是没有什么效果的 只能自定义v ...

  5. ios手势

    iOS 手势操作:拖动.捏合.旋转.点按.长按.轻扫.自定义 大 中 小   1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. i ...

  6. iOS 手势操作:拖动、捏合、旋转、点按、长按、轻扫、自定义

    1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureReco ...

  7. iOS七大手势之(平移、捏合、轻扫、屏幕边缘轻扫)手势识别器方法

    使用手势很简单,分为两步: 创建手势实例.当创建手势时,指定一个回调方法,当手势开始,改变.或结束时,回调方法被调用. 添加到需要识别的View中.每个手势只对应一个View,当屏幕触摸在View的边 ...

  8. 【转】iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) -- 不错不错

    原文网址:http://blog.csdn.net/totogo2010/article/details/8615940 1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手 ...

  9. iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)

    iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)       1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加 ...

随机推荐

  1. ubuntu12.04 make xconfig出错解决

    xconfig是linux下X Window环境中用于配制的一个工具,和menuconfig相似,但用法更友好方便,用如下命令可以进入配制界面: make xconfig 因为在ubuntu系统中,编 ...

  2. 【HDOJ】3727 Jewel

    静态区间第K大值.主席树和划分树都可解. /* 3727 */ #include <iostream> #include <sstream> #include <stri ...

  3. annotatedClasses和component-scan冲突吗

    annotatedClasses:配置在sessionFactory下面表示的是,哪些实体需要映射,代码如下: <bean id="sessionFactory" class ...

  4. bzoj1385: [Baltic2000]Division expression

    欧几里得算法.可以发现规律,a[2]作为分母,其他作为分子,必定是最好的选择.判断是否为整数即可. #include<cstdio> #include<cstring> #in ...

  5. C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别

    1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...

  6. postgresql 行转列,拼接字符串

    create table k_user ( op_id ) not null, op_name ) not null, password ) not null, real_name ) not nul ...

  7. 【转】在Tomcat配置JNDI数据源的三种方式

    在我过去工作的过程中,开发用服务器一般都是Tomcat 数据源的配置往往都是在applicationContext.xml中配置一个dataSource的bean 然后在部署时再修改JNDI配置 我猜 ...

  8. Hibernate4.x之Session

    Hibernate Session概述 Session接口是Hibernate向应用程序提供的操纵数据库的最主要的接口,它提供了基本的保存.更新.删除和加载Java对象的方法. Session具有一个 ...

  9. ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例

    在实际的ASP.NET mvc项目开发中,有时会遇到一个参数是一个List.Dictionary等集合类型的情况,默认的情况ASP.NET MVC框架是怎么为我们绑定ASP.NET MVC的Actio ...

  10. 也用 Log4Net 之将日志记录到数据库的后台实现 (二)

    也用 Log4Net 之将日志记录到数据库的后台实现 (二)  大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之 ...