Cocos2d-x 系列七之用户交互

如同android中的用户交互,cocos2d-x通常也需要对一些用户点击、触摸事件进行监听;

一、 简单触摸事件


    auto listener = EventListenerTouchAllAtOnce::create();
listener->onTouchesBegan = [](const std::vector<Touch*>&, Event*) {
log("onTouchesBegan");
};
listener->onTouchesMoved = [](const std::vector<Touch*>& ts, Event* e) {
log(" touch count is %ld" +ts.size());
};
Director::getInstance()->getEventDispatcher()
->addEventListenerWithSceneGraphPriority(listener, this);

触摸事件使用的监听接口是EventListenerTouchAllAtOnce,他有如下几个触摸事件回调函数;


public:
std::function<void(const std::vector<Touch*>&, Event*)> onTouchesBegan;
std::function<void(const std::vector<Touch*>&, Event*)> onTouchesMoved;
std::function<void(const std::vector<Touch*>&, Event*)> onTouchesEnded;
std::function<void(const std::vector<Touch*>&, Event*)> onTouchesCancelled;

4个函数不再说明具体对应功能,函数名已经表示得很清楚;

二、触摸事件传递

有时候需要对角摸事件一个一个的进行捕获,此时就需要用到EventListenerTouchOneByOne,它也有几个回调函数;


public:
std::function<bool(Touch*, Event*)> onTouchBegan;
std::function<void(Touch*, Event*)> onTouchMoved;
std::function<void(Touch*, Event*)> onTouchEnded;
std::function<void(Touch*, Event*)> onTouchCancelled;

注:onTouchBean返回值为bool类型


    auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [](Touch *t, Event * e) {
log("onTouchBegan");
return true;
};
listener->onTouchMoved = [](Touch* t, Event * e) {
log("onTouchMoved");
};
Director::getInstance()->getEventDispatcher()
->addEventListenerWithSceneGraphPriority(listener, this);

注意onTouchBegan事件,如果后面要继续获取其它触摸事件,需要让返回值为true;返回值true表示事件还要继续向后传递;
实际上,cocos2d-x为了程序运行的效率,如果返回值为false,表示事件不再向后传递,将不再捕获onTouchMoved等事件;返回true的时候,才表示事件还要向后传递;

三、加速传感器


    Device::setAccelerometerEnabled(true); // @1
auto listener = EventListenerAcceleration::create([](Acceleration* a, Event*) {
log("x:%g,y:%g,z:%g", a->x, a->y, a->z);
});
Director::getInstance()->getEventDispatcher()
->addEventListenerWithSceneGraphPriority(listener, this);

上面是一个简单的使用加速传感器的例子,需要注意的是 @1 要设置启用加速传感器

四、按键事件

在Iphone手机上,不用处理按键事件,主要使用在android手机上,如同android
sdk中的按键事件一样,cocos2d-x也会返回一个按键对应的code;


    auto listener = EventListenerKeyboard::create();
listener->onKeyReleased = [](EventKeyboard::KeyCode code, Event * e) {
log(" keycode is %d", code);
switch (code) {
case EventKeyboard::KeyCode::KEY_BACKSPACE:
Director::getInstance()->end(); // @1:cocos2d中,默认按返回键是不会退出应用程序的,需要添加处理才能退出应用程序
break;
default:
break;
}
};
Director::getInstance()->getEventDispatcher()
->addEventListenerWithSceneGraphPriority(listener, this);

注:@1

时间: 2024-10-29 19:11:48

Cocos2d-x 系列七之用户交互的相关文章

struts2官方 中文教程 系列七:消息资源文件

介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字段标签,并根据用户的语言环境将文本更改为特定的语言. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列七:消息资源文件  即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html 下载本章节代码 信息资源属性文件 在Struts2 we

Android SDK上手指南 3:用户交互

在这篇教程中,我们将对之前所添加的Button元素进行设置以实现对用户点击的检测与响应.为了达成这一目标,我们需要在应用程序的主Activity类中略微涉及Java编程内容.如果大家在Java开发方面的经验不太丰富也没必要担心,只要按步骤进行即可完成学习.我们将在本系列的下一篇文章中深入探讨Java语法,从而保证大家了解初步Android开发任务中所必需的编程语言知识. 大家可以在Android当中以多种不同方式实现用户交互.我们将学习两种最为典型的处理方案,从而实现应用按钮对用户点击的感应--

【转】使用 WebGL 进行 3D 开发,第 3 部分: 添加用户交互

转自HTML5游戏开发者社区 使用 WebGL 进行 3D 开发,第 1 部分: WebGL 简介使用 WebGL 进行 3D 开发,第 2 部分: 使用 WebGL 库以更少的编码做更多的事情使用 WebGL 进行 3D 开发,第 3 部分: 添加用户交互 WebGL API 为 JavaScript 开发人员提供了直接利用当今的 PC 和移动设备硬件中的强大内置 3D 图形加速功能的能力.现代浏览器已经明确支持 WebGL,WebGL 使得人们可以为主流 Web 用户创建高性能的 3D 游戏

Maven 系列 七 :Maven的生命周期和插件

一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周期是抽象的,其中的具体任务都交由插件来完成.Maven为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin.用户也可自行配置或编写插件. 1 . 三套生命周期 Maven定义了三套生命周期:clean.default.site,每个生命周期都包含了一些阶段(phase).三套生命周期相互独立,但各个生

7.oracle学习门户系列七---网络管理和配置

oracle学习门户系列七 网络管理和配置 们学习了模式和用户.包含模式定义以及模式的作用. 这篇我么来看下ORACLE数据库中的网络管理和配置.只是这篇好像和上篇没有继承啊.这怎么看? Ok,事实上呢-..咳咳-..我们继续往下走 数据库的网络配置是比較基础可是也是很重要的.假设一个数据库连不上外部的世界:那么他就是一个孤立的资源,基本上就能够确认这是个无用的数据库系统. 我们在数据库定义中以前讲过,数据库是须要有多用户分享的,没有网络何来分享呢?对不正确.那肯定不是数据库了嘛. 前面摘要已经

Cocos2d-x-3.6 用户交互原理---------如何通过JNI连接Java和C++

用户交互这里指的就是用户在手机上的点击,滑动以及晃动手机等行为,从而得到相应的反馈.今天学习Cocos2dx,遇到交互问题,所以就写出来和大家分享一下.我这里是以Android连接为例的,因为目前我只会Android相关的开发.好了,不多说,看下面步骤: 第一步:在Android中,交互操作的入口在SurfaceView或是GLSurfaceView中的onTouchEvent时间中.本例代码所在位置org.cocos2dx.lib---->Cocos2dxGLSurfaceView.java

小编带你了解Netty 系列七(那些开箱即用的 ChannelHandler).

一.前言Netty 为许多通用协议提供了编×××和处理器,几乎可以开箱即用, 这减少了你在那些相当繁琐的事务上本来会花费的时间与精力.另外,这篇文章中,就不涉及 Netty 对 WebSocket协议 的支持了,因为涉及的篇幅有点大,会在下一篇文章做一个具体的介绍. 回到顶部二.SSL 协议SSL 协议是安全协议,层叠在其他协议之上.为了支持 SSL/TLS, Java 提供了 javax.net.ssl 包,它的 SSLContext 和 SSLEngine 类使得实现解密和加密相当简单直接.

《每周一点canvas动画》——用户交互

用户交互也许是我们学习canvas动画中首先需要掌握的部分.毕竟,如果没有交互或者向动画中做一些动态的输入,那么这跟看电影有什么区别呢?用户交互基于事件,一般来说包括:鼠标事件,触摸事件和键盘事件. 1.事件和事件执行 在理解事件之前,你需要明白什么是listener和handler.listener(即监听器)决定当一个事件发生时是否做出反应.handler(即执行者)是一个函数,当事件发生时被调用.好了,扯了这么多直接上代码: element.addEventListener(type, h

python变量及用户交互,用户名格式化输出

变量 name = wwjun Name2 = "wwjun" print ("name,Name2") 用户交互 Username = input ("username:") Password = input ("password:") Print(username,password) 用户名格式化输出 name = input ("name:") age = input ("age:"