`
caiwb1990
  • 浏览: 315156 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

11. cocos2dx Touch

阅读更多
理解一个触摸事件可以从时间空间两方面考虑。



1、触摸事件的时间方面

    触摸事件的在时间方面,如下图所示,可以有不同的“按下”、“移动”和“抬起”等阶段,表示触摸是否刚刚开始、是否正在移动或处于静止状态,以及何时结束,也就是手指何时从屏幕抬起。此外,触摸事件的不同阶段都可以有单点触摸或多点触摸,是否支持多点触摸还要看设备和平台。




    触摸事件有两个事件监听器:EventListenerTouchOneByOneEventListenerTouchAllAtOnce ,分别对应单点触摸和多点触摸。这些监听器有一些触摸事件响应属性,这些属性对应着触摸事件不同阶段。通过设置这些属性能够实现事件与事件处理者函数的关联。


function<bool(Touch*,Event*)> onTouchBegan 
//当一个手指触碰屏幕时回调该属性所指定函数。如果函数返回值为true,则可以回调后面的两个属性(onTouchMoved和onTouchEnded)所指定的函数,否则不回调。
 
std::function<void(Touch*,Event*)> onTouchMoved 
//当一个手指在屏幕移动时回调该属性所的指定函数。
 
std::function<void(Touch*,Event*)> onTouchEnded 
//当一个手指离开屏幕时回调该属性所的指定函数。
 
std::function<void(Touch*,Event*)> onTouchCancelled 
//当单点触摸事件被取消时候回调该属性所的指定函数。


说明 std::function是一种通用的函数封装。std::function的实例可以是任何可以调用的目标,这些目标包括:函数、Lambda表达式、绑定表达式以及其它函数对象等。


std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesBegan 
//当多个手指触碰屏幕时回调该属性所指定的函数。
 
std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesEnded 
//当多个手指在屏幕上移动时回调该属性所指定的函数。
 
std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesMoved 
//当多个手指离开屏幕时回调该属性所指定的函数。
 
std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesCancelled 
//当多点触摸事件被取消时回调该属性所指定的函数。


使用这些属性的代码片段演示了它们的使用:

    首先我们需要使用 EventListenerTouchOneByOne::create() 创建单独触摸事件监听器对象。

    然后设置它的  listener->onTouchBegan 属性,其中CC_CALLBACK_2(HelloWorld::touchBegan, this)是使用 CC_CALLBACK_2宏 绑定回调函数,该函数是下面定义的  bool HelloWorld::touchBegan(Touch*touch, Event* event)  函数。


其它触摸事件的阶段也需要采用类似的代码,这里不再赘述。



2、触摸事件的空间方面

空间方面就是每个触摸点(Touch)对象包含了当前位置信息,以及之前的位置信息(如果有的话),下面的函数是可以获得触摸点之前的位置信息:

Point getPreviousLocationInView() //UI坐标
Point getPreviousLocation() //OpenGL坐标


下面的函数是可以获得触摸点当前的位置信息。

Point getLocationInView() //UI坐标
Point getLocation() //OpenGL坐标
  • 大小: 23.9 KB
分享到:
评论

相关推荐

    Learning.Cocos2d-JS.Game.Development

    Title: Learning Cocos2d-JS Game Development Author: Emanuele Feronato Length: 188 pages Edition: 1 Language: English Publisher: Packt Publishing Publication Date: 2015-01-12 ISBN-10: 1784390070 ISBN-...

    Learn.cocos2d.Game.Development.with.iOS.5

    cocos2d是一款开源的2D游戏开发框架,特别针对iOS设备(如iPhone、iPad和iPod touch)进行了优化。它提供了一系列强大的工具和API,使得游戏开发变得更为直观和高效。无论是专业游戏开发者还是编程新手,都能从中...

    Apress.Learn.cocos2d.2.Sep.2012.pdf

    #### 一、Cocos2d for iOS 概述 - **Cocos2d**:是一款开源的2D游戏框架,适用于iOS和OS X平台。它为开发者提供了一系列工具和API,使得游戏开发过程变得更加简单高效。 - **iOS 5**:本书发布时(2012年9月)最新...

    cocos2d-touch事件

    在Cocos2d-x游戏开发框架中,触摸事件(Touch Events)是用户与屏幕交互的主要方式,对于构建具有互动性的2D游戏至关重要。Cocos2d-x提供了丰富的API来处理这些事件,使得开发者能够轻松地响应用户的点击、滑动等...

    xtzf2 ios cocos2d box2d touch 带粒子效果的火球

    在iOS游戏开发中,Cocos2D和Box2D是两个非常重要的库,它们分别用于2D图形渲染和物理模拟。本示例项目"xtzf2"是一个利用这两个库创建的简单游戏,其中包含了触摸控制和粒子效果的火球元素。下面我们将详细探讨这些...

    cocos2d-x TouchDemo

    【cocos2d-x TouchDemo】是一个基于cocos2d-x框架的示例项目,它主要展示了如何在游戏或应用中处理触摸事件。cocos2d-x是一个流行的开源跨平台2D游戏开发框架,广泛应用于iOS、Android以及Windows等多平台的开发。在...

    cocos2d-x 双指缩放,单指拖动,双击自动放大地图

    void MyLayer::onTouchesMoved(const std::vector&lt;cocos2d::Touch*&gt;& touches, cocos2d::Event* event) { // 获取两个触点的位置 cocos2d::Vec2 touch1Pos = touches[0]-&gt;getLocation(); cocos2d::Vec2 touch2Pos...

    cocos2d-x权威指南

    根据提供的信息,“cocos2d-x权威指南”这一标题与描述明确指出了本文将围绕cocos2d-x这一游戏开发框架展开深入探讨。cocos2d-x是一款非常流行的跨平台游戏开发引擎,支持多种编程语言如C++、JavaScript等,并且能够...

    知易cocos2d源代码

    10. **Touch事件处理**:Cocos2D支持触摸事件,允许开发者根据用户的触摸输入来控制游戏逻辑。 学习【知易cocos2D源代码】,初学者将接触到以下关键知识点: 1. **Objective-C编程语言**:Cocos2D基于Objective-C...

    cocos2d入门cocos2d入门

    Cocos2d是一个开源的游戏开发框架,主要用于创建2D游戏、演示和其他图形交互应用。它在iOS和Android等平台上广泛使用。本篇文章将带你入门cocos2d,讲解环境搭建、基本概念以及如何进行触控输入和适配Retina显示。 ...

    Cocos2d-x跑酷(StarterKit)游戏源码

    Cocos2d-x提供了`EventDispatcher`来注册和处理事件,开发者可以监听`Touch`事件,根据玩家的滑动或点击来控制角色的移动。 6. **资源管理**:游戏中的音频、图像等资源需要有效管理。Cocos2d-x有内置的`...

    xcode cocos2d工具包

    在Xcode中集成Cocos2d,通常通过创建一个新的Cocoa Touch静态库项目或Cocoa Touch Framework项目来实现。这样可以将Cocos2d的源代码或库文件引入到项目中。此外,还可以使用CocoaPods或Carthage等依赖管理工具,...

    cocos2d-x手势识别(单击、双击、各形状)

    bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event) { // 记录开始触摸的位置 startTouchPosition = touch-&gt;getLocation(); return true; } void onTouchEnded(cocos2d::Touch *touch, cocos2d::...

    cocos2d中文版

    cocos2d for iPhone是一款专为苹果设备设计的游戏开发框架,适用于iPhone、iPod Touch以及iPad平台。它采用Objective-C语言编写,这使得开发者能够充分利用苹果的官方文档和SDK,实现更深层次的集成与优化。cocos2d...

    Cocos2D-X开发学习笔记-触屏事件使用示例

    virtual bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event) override { cocos2d::Vec2 touchLocation = touch-&gt;getLocation(); // 处理触摸开始的逻辑 return true; // 返回true表示继续监听...

    Cocos2d-x 自定义可接受处理触摸信息精灵类

    virtual bool touchBegan(cocos2d:: CCTouch* touch, cocos2d::CCEvent* event); virtual void touchMoved(cocos2d::CCTouch* touch, cocos2d::CCEvent* event); virtual void touchEnded(cocos2d::CCTouch* ...

    cocos2d_iPhone_API.chm

    cocos2d for iPhone API,用于快速开发iPhone 2D程序。 该文档根据下列内容编译 cocos2d for iPhone API reference ver.0.7.1 URL: http://www.sapusmedia.com/cocos2d-iphone-api-doc/ cocos2d程序效果图: ...

Global site tag (gtag.js) - Google Analytics