转自: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. NFC(6)NFC编程的几个重要类,NFC硬件启动android应用原理

    用于NFC编程的几个重要类 Tag NFC 标签 NfcAdapter Nfc 的适配类 NdefMessage 描述NDEF格式的信息 NdefRecord 描述NDEF信息的一个信息段,类似tab ...

  2. 【原创】ZYNQ学习笔记(一) HelloWorld实现

    拿过ZYNQ开发板,里面给了很多部件,果断从网上下载了手册,N多手册和原理图. 要比Spartan-6复杂多了,耐心地看了看,知道ZYNQ系列分为PS(系统)以及PL(逻辑)部分. 之前,自己一直在做 ...

  3. MQ-传输方式Topic和Queue的对比

    Jms规范里的两种message传输方式Topic和Queue,两者的对比如下表():   Topic Queue 概要 Publish  Subscribe messaging 发布订阅消息 Poi ...

  4. C# 分布式缓存服务器方案

  5. python扩展实现方法--python与c混和编程

    前言 需要扩展Python语言的理由: 创建Python扩展的步骤 1. 创建应用程序代码 2. 利用样板来包装代码 a. 包含python的头文件 b. 为每个模块的每一个函数增加一个型如PyObj ...

  6. s​e​t​ ​x​a​c​t​_​a​b​o​r​t ​用​法

    默认行为 默认为SET XACT_ABORT OFF,没有事务行为. SET XACT_ABORT ON SET XACT_ABORT ON分为两种: 1.总体作为一个事务,整体提交或整体回滚,格式为 ...

  7. Android 删除短信

    1.删除短信的函数,一条一条的删除所有短信 /* * Delete all SMS one by one */ public void deleteSMS() { try { ContentResol ...

  8. 安装GNS3-0.8.6-all-in-one时language里没有选项

    初次安装使用GNS3,安装的版本是GNS3-0.8.6-all-in-one,本人也是菜鸟,安装时都是一路 Next,结果安装后运行出现了这样的问题,如图 language里是没有选项的,解决方法 把 ...

  9. string 常用 方法

    boost::array< char, 16 > header; string(header.begin(),header.end()) std::vector<uchar> ...

  10. Python第一个入门程序

    #!usr/bin/env python3 #在UNIX上,当某程序在控制台中被引用时,该文件的头两个字节先被读入.如果这两个字节是ASCII字符 #!, #shell就会认为该文件将要由解释器执行, ...