Cocos2d-x3.2 多点触控


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

//GameScene.h

 

#include "cocos2d.h"

 

USING_NS_CC;

 

class GameScene : public cocos2d::Layer

{

public:

    static cocos2d::Scene* createScene();

     

    virtual bool init();

    //多点触控回调函数

    virtual void onTouchesBegan(const std::vector<Touch*>& touches, Event *unused_event);

    virtual void onTouchesMoved(const std::vector<Touch*>& touches, Event *unused_event);

    virtual void onTouchesEnded(const std::vector<Touch*>& touches, Event *unused_event);

    virtual void onTouchesCancelled(const std::vector<Touch*>&touches, Event *unused_event);

     

    void menuCallback(Ref* pSender);

     

    CREATE_FUNC(GameScene);

     

private:        //注意不能用auto关键字

    Size size;

    Sprite *sprite;

};

       简介: cocos2d-x 3.0版本以后的事件分发的机制较之之前的版本进行了修改,把事件处理的逻辑分离出来,并通过不同的事件监听器来监听不同的事件。当一个节点收到了事件,就会指派一个事件分发器_eventDispatcher专门来分发这些事件。对于触摸来说,大概的过程就是我们先创建一个对应触摸事件的监听器,然后覆盖触摸事件的函数,并把它们绑定到监听器,然后可以设置一下这个监听器的属性,最后把监听器添加到分发器之中,系统就会自动进行触摸事件的处理。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

//GameScene.cpp

 

//可参考MutiTouchTest.cpp

 

#include "GameScene.h"

 

USING_NS_CC;

 

cocos2d::Scene* GameScene::createScene()

{

    auto scene = Scene::create();   //创建一个场景

    auto layer = GameScene::create();   //创建一个图层

    scene->addChild(layer);

    return scene;

}

 

//初始化当前的图层

bool GameScene::init()

{

    if(!Layer::init())      //初始化父类

        return false;

     

    //获取屏幕大小

    size = Director::getInstance()->getVisibleSize();

    //auto size = Director::getInstance()->getWinSize();

     

    auto sprite = Sprite::create("Icon.png");

    sprite->setPosition(Vec2(size.width/2, size.height/2));

    sprite->setTag(12);

    this->addChild(sprite);

     

     

    //1.注册监听事件对象

    auto listener = EventListenerTouchAllAtOnce::create();      //多点触摸

     

    //2.定义监听对象的回调方法

    listener->onTouchesBegan = CC_CALLBACK_2(GameScene::onTouchesBegan, this);

    listener->onTouchesMoved = CC_CALLBACK_2(GameScene::onTouchesMoved, this);

    listener->onTouchesEnded = CC_CALLBACK_2(GameScene::onTouchesEnded, this);

    listener->onTouchesCancelled = CC_CALLBACK_2(GameScene::onTouchesCancelled, this);

     

    //3.在事件监听器中注册(事件监听器包含:触摸事件、键盘相应事件、加速记录事件、鼠标响应事件、自定义事件)

    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

 

     

    return true;

}

 

void GameScene::menuCallback(Ref* pSender)

{

     

}

//触摸开始时调用

void GameScene::onTouchesBegan(const std::vector<Touch*>& touches, Event *unused_event)

{

    for (auto &item: touches)       //遍历容器中的各个成员!!!多点触摸时将显示同时显示多个精灵

    {

        auto touch = item;

        auto location = touch->getLocation();

        //加载一个精灵

        auto sprite = Sprite::create("Icon.png");

        sprite->setPosition(location);

        addChild(sprite);

    }

}

//触摸移动时调用

void GameScene::onTouchesMoved(const std::vector<Touch*>& touches, Event *unused_event)

{

     

}

//触摸结束时调用

void GameScene::onTouchesEnded(const std::vector<Touch*>& touches, Event *unused_event)

{

     

}

//取消触摸时调用

void GameScene::onTouchesCancelled(const std::vector<Touch*>&touches, Event *unused_event)

{

     

}

备注:关键掌握对容器touches中成员的遍历。C++11新特性中,for 语句将允许简单的范围迭代:第一部分定义被用来做范围迭代的变量,就像被声明在一般for循环的变量一样,其作用域仅只于循环的范围。而在":"之后的第二区块,代表将被迭代的范围。这样一来,就有了能够允许C-style数组被转换成范围概念的概念图。这可以是std::vector,或是其他符合范围概念的对象。

时间: 2024-11-10 00:35:57

Cocos2d-x3.2 多点触控的相关文章

android-cocos2dx 图片的多点触控缩放

问题描述 cocos2dx 图片的多点触控缩放 #include "HelloWorld.h" using namespace cocos2d; CCScene* HelloWorld::scene() { CCScene * scene = NULL; do { // 'scene' is an autorelease object scene = CCScene::create(); CC_BREAK_IF(! scene); // 'layer' is an autoreleas

UI前沿技术-WPF中的多点触控操作事件

就在过去几年,多点触控还只是科幻电影中表现未来主义的一种重要手法,现在俨然已经成为主流的用户界面技术.多点触控显示屏现在成了新型智能手机和 Tablet 计算机的标准显示屏.此外,它还可能在公共场所的计算机上普及,例如 Microsoft Surface 率先开发的网亭或桌面计算机. 实际存在的唯一不确定因素是多点触控在常规台式计算机上的普及.这种普及的最大障碍或许是长时间在垂直屏幕上移动手指所产生的疲劳(称为"大猩猩手臂").我个人希望多点触控的强大功能将切实推进桌面显示屏的重新设计

Photoshop CS4 for Mac 支持多点触控操作

Adobe CS4 这几天已经可以正式接受预定,然而关于其 Photoshop CS4 当中存在的某个先前大家没注意.没公开的小功能(不知道是不是早就有人发现了呢?),或许可以让 Mac 使用者(特别是 MBA.MBP 的使用者)更坚定的升级.(要怎样升级就不是咱们管得了的了!) 是的!根据 Wired 报导,PS CS4 现在已经支持了 MBA.MBP 触摸板上的多点触控操作:这位编辑在玩乐许久的 beta 版上发现了一些多点触控操作的支持,包括了两根手指操作的放大缩小.旋转图片.浏览时用手指

手指之舞 – 探讨Silverlight中的多点触控支持

每次去纽约的美国自然历史博物馆,我必定会好好参观一下灵长类馆.灵长类馆选择了大量的骨骼和剥制标本,展示了一幅灵长类动物进化的全景,动物从极小的树鼩.狐猴和绒猴一直到黑猩猩.大猩猩和人类. 这个展览最引人注目的是所有灵长类动物都有着惊人的共性:手的骨骼结构相同,包括一个对生拇指.这种使我们的祖先和远亲可以抓握从而爬上树枝的相同关节排列和数目,让我们的物种可以影响周围的世界和从事建造工作.我们的双手可能源于数百万年前小型灵长类动物的爪子,而双手也是使我们真正成为人类的重要因素. 我们会本能地伸出手指

Silverlight多点触控(MultiTouch)

多点触控输入是一种输入类型,它依赖于触摸屏输入概念,还可能依赖多种触控及其被解释为单元(有时也称为帧)的特征.多点触控输入需要有对触控敏感的硬件,以及支持将触控事件向各应用程序公开所需基础结构的环境.本主题讨论 Silverlight 中对多点触控的支持,并介绍几个关键概念. 多点触控硬件 多点触控这一概念需要能够记录表面上所产生触压的硬件.该表面可以直接是屏幕(如 Tablet PC 设备),也可以是单独的专用输入设备(如绘图板).其中,Tablet PC 设备或 类似的显示屏直接对触控敏感的

Android多点触控技术实战,自由地对图片进行缩放和移动

在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果,虽然这种效果很炫很酷,但其实还 只能算是一个半成品,因为照片墙中所有的图片都是只能看不能点的.因此本篇文章中,我们就来对这一功 能进行完善,加入点击图片就能浏览大图的功能,并且在浏览大图的时候还可以通过多点触控的方式对图片 进行缩放. 如果你还没有看过 Android瀑布流照片墙实现,体验不规则排列的美感 这篇文章,请尽 量先去阅读完再来看本篇文章,因为这次的代码完全是在上次的基础上进行开发的. 那我们现在就开 始动手吧,首先打

如何开启Windows 7系统的多点触控

  "多点触控"技术已在苹果iPhone手机和MacBook Air笔记本电脑上大获成功,该技术可以实现对数码产品的便捷操控,Windows 7提供了对多点触控的良好支持,系统附带多点触控软件(Multitouch Software)包,为多点触控电脑优化的含6款游戏和应用程序的组件,该触控包将将提供给电脑厂商,它们将为适用触控技术的电脑选择安装这一产品. 要开启设备的多点触控功能,必须安装相应的驱动,否则还是单点触控.而且,随着驱动的版本更新升级,不仅仅支持两点触控.甚至可以支持三点

多点触控鼠标是什么

  触控鼠标提供了一个基于不同的触摸手势:一个手指滚动,平移,倾斜,而拇指刷卡将发送给您向前或向后.显然,向前或向后可以在不同的活动意味着不同的事情,但它基本上能够推动后退按钮或在浏览器的前进按钮,或通过PowerPoint演示文稿中快速滚动. 多点触摸亦称多点触控.多重触控.多点感应.多重感应等,该系统是采用人机交互技术与硬件设备共同实现的技术,能在没有传统输入设备(如:鼠标.键盘等)下进行计算机的人机交互操作.多点触控实现了一个触摸屏(屏幕,桌面,墙壁等)或触控板,同时接受来自屏幕上多个点的

Firefox如何使用Multi Touch多点触控

  苹果电脑上,Safari浏览器可以通过Multi Touch多点触控触摸板实现很多功能(比如翻页.后退等),毕竟Safari是苹果"亲生"的.能否在Firefox里使用Multi Touch多点触控呢?新版Firefox能!下载地址和Firefox里使用多点触控的"指法"如下 在Firefox里使用多点触控,首先要升级到Firefox 3.1 Beta 2以上 然后说说在Firefox里使用多点触控的"指法": 双指张开:放大页面; 双指合拢