转自: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. 结构体 lock_sys

    typedef struct lock_sys_struct lock_sys_t; extern lock_sys_t* lock_sys; struct lock_sys_struct{ hash ...

  2. 深入理解Java虚拟机 - 虚拟机内存划分

    在内存管理方面,Java相对于C和C++的区别在于Java具有内存动态分配以及垃圾收集技术,但平时我们很少去关注JVM的内存结构以及GC,在出现内存泄露或溢出方面的问题,排查工作将变得异常艰难.   ...

  3. BMap介绍

    API引用路径: <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&am ...

  4. hdu 2955 Robberies

    Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. (5)jvm垃圾回收器相关垃圾回收算法

    引用计数法[原理]--->引用计数器是经典的也是最古老的垃圾收集防范.--->实现原理:对于对象A,只要有任何一个对象引用A,则计数器加1.当引用失效时,计数器减1.只要对象A的计数器值为 ...

  6. iOS开发之UILabel

    UILabel是iOS开发中常用的一个组件,主要用来显示内容. UILabel的主要使用如下: /*尺寸*/ CGRect labelRect = CGRectMake(100, 100, 80, 4 ...

  7. 转载:C++ 虚函数表解析

    目录(?)[+]   转载:http://blog.csdn.net/haoel/article/details/1948051# 前言 C++中 的虚函数的作用主要是实现了多态的机制.关于多态,简而 ...

  8. MAC下显示或者隐藏文件的命令

    显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏Mac隐藏文件的命令:defaults writ ...

  9. 动态加载JS(css)文件

    <script language="javascript">document.write("<script src='test.js'><\ ...

  10. 了解常见的 Azure 灾难

    以下内容涵盖多种不同类型的灾难情况.数据中心故障不是应用程序范围内发生故障的唯一原因.设计不良或管理错误也会导致中断.请在恢复计划的设计和测试阶段设想可能导致故障的原因,这样做很重要.一个好的计划可充 ...