前几篇感觉自己在写教育文章,╮(╯▽╰)╭。今天换成开发者的口吻,毕竟我也是在边学边写博客。

处理用户交互包括:单点触摸、多点触摸、事件传递、传感器、物理按键等部分。

单点触摸:

触摸事件传递顺序

onTouchBegan——>onTouchMoved——>onTouchEnded。还有一个onTouchCancelled。

这些事件的监听都是闭包函数(匿名函数,lambda表达式),

[](Touch *t, Event *e){

    //return false;//只有onTouchBegan需要返回bool值
}

如果事件的onTouchBegan监听返回false,则触摸事件不会向后传递。

添加事件监听有3个步骤:1、创建事件监听对象指针;2、实现触摸事件监听;3、分发触摸事件监听

下面是一个示例,我在控制台打印输出3个事件名称。

bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if (!Layer::init())
{
return false;
} Size size = Director::getInstance()->getVisibleSize(); LabelTTF *label = LabelTTF::create("Click me", "Courier", );
label->setPosition(size.width / , size.height/);
addChild(label); //一次只能监听到一个触摸点
EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [](Touch *t, Event *e){
/*if (e->getCurrentTarget()->getBoundingBox().containsPoint(t->getLocation())){
log("onTouchBean");
return true;
}*/
/*if (label->getBoundingBox().containsPoint(t->getLocation())){
log("onTouchBegan");
return true;
}*/
log("onTouchBegan");
return true;
};
listener->onTouchMoved = [](Touch *t, Event *e){
log("onTouchMoved");
};
listener->onTouchEnded = [](Touch *t, Event *e){
log("onTouchEnded");
};
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, label);
return true;
}

运行效果中,我先用鼠标左键点击了一下窗体界面,控制台输出onTouchBegan,然后松开鼠标左键,控制台输出onTouchEnded;重复一次;然后点击之后移动,控制台不停输出onTouchMoved,然后松开,控制台输出onTouchEnded。

运行效果:

多点触摸:

多点触摸的事件监听变成了onTouchesBegan, onTouchesMoved, onTouchesEnded。还有一个onTouchesCancelled。

事件监听的闭包函数:

[](std::vector<Touch*> ts, Event *e){
//只有onTouchesBegan需要返回bool值
}

这个测试的话要用真机。

举个栗子:

监听当前层的触摸事件,手指触摸手机屏幕并移动的时候,控制台输出触摸点的个数。

代码如下:

bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if (!Layer::init())
{
return false;
} Size size = Director::getInstance()->getVisibleSize(); //监听多点触摸事件
auto listener = EventListenerTouchAllAtOnce::create();
listener->onTouchesBegan = [](std::vector<Touch*> *ts, Event *e){
log("onTouchesBegan");
};
listener->onTouchesMoved = [](std::vector<Touch*> ts, Event *e){
log("touches moved, and touch count is %d", ts.size());
};
//监听当前的层
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
return true;
}

运行效果:

算了,不运行了。(⊙o⊙)…

等我写一篇把windows平台的代码编译到Android平台的流程再说。

传感器:

这里介绍加速度传感器的调用。

关键代码:

bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if (!Layer::init())
{
return false;
} Device::setAccelerometerEnabled(true);//开启加速器 auto listener = EventListenerAcceleration::create([](Acceleration* a, Event *e){
//%g是自动选择%f和%e中总位数最短的来表示浮点数,%f是浮点数形式,%e是指数形式
//x, y, z是double类型
log("x:%g, y:%g, z:%g", a->x, a->y, a->z);
}); Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
return true;
}

这个需要真机运行才能看到效果,意味着需要编译到Android、ios或wp平台。后面我会写一篇编译并运行到Android真机的博客。

物理按键交互:

这里的代码示意的是Android平台的返回键的监听:

bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if (!Layer::init())
{
return false;
} auto listener = EventListenerKeyboard::create();
listener->onKeyReleased = [](EventKeyboard::KeyCode keyCode, Event *e){
log("key code : %d", keyCode);
switch (keyCode)
{
//listen in the back key in Android Devices
case EventKeyboard::KeyCode::KEY_BACKSPACE:
Director::getInstance()->end();
break;
}
}; return true;
}

还是需要用真机测试。

五毛的cocos2d-x学习笔记06-处理用户交互的更多相关文章

  1. Bash脚本编程学习笔记05:用户交互与脚本调试

    用户交互 在<学习笔记04>中我们有提到位置参数,位置参数是用来向脚本传递参数的一种方式.还有一种方式,是read命令. [root@c7-server ~]# read name alo ...

  2. Linux学习笔记06—系统用户及用户组的管理

    一.认识/etc/passwd和/etc/shadow 1./etc/passwd 由 ‘:’ 分割成7个字段,每个字段的具体含义是: 用户名 存放账号的口令:现在存放在/etc/shadow下,在这 ...

  3. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记

    机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...

  4. iOS学习笔记06—Category和Extension

    iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inher ...

  5. springmvc学习笔记(18)-json数据交互

    springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ...

  6. [Golang学习笔记] 06 程序实体3 类型断言和类型转换

    类型断言: 语法:<目标类型的值>,<布尔参数> := <表达式>.( 目标类型 ) // 安全类型断言<目标类型的值> := <表达式>. ...

  7. stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)

    STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...

  8. [原创]java WEB学习笔记06:ServletContext接口

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. Bash脚本编程学习笔记06:条件结构体

    简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式. if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现, ...

随机推荐

  1. Delphi中methodaddress的汇编代码解析

    class function TObject.MethodAddress(const Name: ShortString): Pointer;asm        { ->    EAX     ...

  2. Centos 升级MySQL版本或者Yum安装Mysql5.6

    Centos 升级MySQL版本或者Yum安装Mysql5.6 1.从MySQL Yum仓库下载最新的rpm文件:http://dev.mysql.com/downloads/repo/yum/Cen ...

  3. stack的应用

    STL除了给我们提供了一些容器(container)以外,还给我们提供了几个容器适配器(container adapters),stack便是其中之一 看过STL源码的人都知道,stack其实是内部封 ...

  4. Spring单例与线程安全小结

    一.Spring单例模式与线程安全   Spring框架里的bean,或者说组件,获取实例的时候都是默认的单例模式,这是在多线程开发的时候要尤其注意的地方. 单例模式的意思就是只有一个实例.单例模式确 ...

  5. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  6. strtus2.3 java.lang.NoSuchFieldException: DEFAULT_PARAM>

    strtus2.3.15.1 的bug请下载 http://download.csdn.net/detail/livalue/6229373 或加群到群共享中下载.214579879

  7. How To Set Dark Theme in Visual Studio 2010

    Want to use the visual studio color theme editor to set the dark theme or other themes? Below shows ...

  8. MailBee的简单使用

    保存为Eml文件方法:MailMessage.SaveMessage() 读取文件方法(不知道是不是我用的问题,没找到直接读取Eml文件的方法): MsgConvert conv = new MsgC ...

  9. Asp.Net写文本日志

    底层代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespac ...

  10. CSS3 grayscale滤镜图片变黑白实例页面

    在网站加入友情链接的LOGO时,因为不同logo颜色的问题,和主题色调可能产生冲突, 我选择用CSS3滤镜让logo变黑白,hover时变回原本的彩色 CSS代码: .gray { -webkit-f ...