Cocos2d-x游戏开发之2.x后弹出键盘后无法响应除键盘外的触摸事件解决

【COCOS2DX-游戏开发之八】点击空白隐藏键盘 cocos2dx edit编辑框点击后显示一个键盘,但是非常的不灵活,点return才能隐藏,如果我们需要点键盘外的背景,实现隐藏键盘,那就方便多了 方法: 1. 到EGLView.mm下 注释2个reurn,这样就能保证显示软键盘的时候,还能将点击事件传送到最底层 // Pass the touches to the superview #pragma mark EAGLVie 阅读详情

此博客基于Cocos2d-2.1rc0-x-2.1.3  API

本站文章转载务必在明显处注明:原文链接: http://blog.youkuaiyun.com/cjsen/article/details/9029865

问题

在使用自定义输入框时,有个功能是点击输入框内弹出键盘,触摸外面隐藏键盘,但实例在cocos2d-x 1.x版本上没有问题的,但在2.x版本后却在出现键盘后没有调用TouchBegin事件,无法响应除键盘外的触摸事件。。。

网上找了些资料,看到了在cocos2d-x源码的EAGLView.mm文件上的响应触摸开始事件上

#pragma mark EAGLView - Touch Delegate
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (isKeyboardShown_)
    {
        [self handleTouchesAfterKeyboardShow];
        return;
    }
    
    int ids[IOS_MAX_TOUCHES_COUNT] = {0};
    float xs[IOS_MAX_TOUCHES_COUNT] = {0.0f};
    float ys[IOS_MAX_TOUCHES_COUNT] = {0.0f};
    
    int i = 0;
    for (UITouch *touch in touches) {
        ids[i] = (int)touch;
        xs[i] = [touch locationInView: [touch view]].x * view.contentScaleFactor;;
        ys[i] = [touch locationInView: [touch view]].y * view.contentScaleFactor;;
        ++i;
    }
    cocos2d::CCEGLView::sharedOpenGLView()->handleTouchesBegin(i, ids, xs, ys);
}
相比1.x版本多了一个条件判断

    if (isKeyboardShown_){

        [selfhandleTouchesAfterKeyboardShow];

        return;

    }

在相应的touchesMoved, touchesEnded,touchesCancelled判断

    if (isKeyboardShown_)

    {

        return;

    }

这就是为什么出现键盘后无法响应其他事件。

而看看touchesBegan上的

[selfhandleTouchesAfterKeyboardShow];方法

-(void) handleTouchesAfterKeyboardShow
{
    NSArray *subviews = self.subviews;
    
    for(UIView* view in subviews)
    {
        if([view isKindOfClass:NSClassFromString(@"CustomUITextField")])
        {
            if ([view isFirstResponder])
            {
                [view resignFirstResponder];
                return;
            }
        }
    }
}
其中CustomUITextField是继承UITextField,这里只是在键盘弹出状态时,并且屏幕上有 CustomUITextField控件时自动隐藏键盘。

所以想在键盘弹出后仍然响应其他触摸事件的话可以直接将判断语句注释掉。。(如果有其他方法,请高手在此回复留言)

ps:在cocos2d-x 2.x之后的版本新添加的CCEditBox输入框,功能十分完善,使用方法也简单:

    CCEditBox *m_pEditName = CCEditBox::create(CCSize(200, 35), CCScale9Sprite::create("btn_right_white.9.png"));
    m_pEditName->setPosition(ccp(size.width/2, size.height/2 + 100));
    m_pEditName->setFontColor(ccRED);
    m_pEditName->setPlaceHolder("Name:");
    m_pEditName->setMaxLength(8);
    m_pEditName->setReturnType(kKeyboardReturnTypeDone);
    m_pEditName->setDelegate(this);
    addChild(m_pEditName);





cocos2d-x 事件分发机制 ——触摸事件监听 cocos2d-x 3.0 出来已经好久了,也已经用3.0写了几个小游戏,感觉3.0的事件触发机制太赞了,随这里总结一下,也算是对知识的一种回忆和加深理解。 3.0的事件分发机制中,需要也仅仅需要通过创建一个事件监听器来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher,所有的事件监听器由这个分发器统一管理,即可完成事件响应。 事件监听器有以下几种: 1、EventL 阅读详情

相关推荐

Cocos2D-X学习13:交互功能——鼠标和键盘

在Cocos2D-X中还支持鼠标和键盘的输入,下面将对其进行学习。下面是一个使用鼠标键盘的示例: Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); //在屏幕上显示指针团案 thi

慢慢积累 4711

cocos ios editBox 键盘退不下去

/frameworks/cocos2d-x-3/cocos/platform/ios/CCEAGLView-ios.mm-(void) handleTouchesAfterKeyboardShow { NSArray *subviews = self.subviews; for(UIView* view in subviews) { //if([view

笙尽缘无 1353

Cocos2.X Android输入框适配:解决软键盘顶起画面与触摸错位问题

在Android应用开发中,多分辨率适配与系统UI交互是常见的工程挑战。其核心原理在于Android的窗口管理系统、View的测量布局流程与渲染引擎之间的协调机制。当软键盘弹出时,系统默认的窗口调整行为(如adjustResize)会改变应用窗口的几何尺寸,若渲染层(如OpenGL ES视口)未能同步响应,就会导致视觉错位与触摸坐标映射失效,严重影响用户体验。这一问题的技术价值在于深入理解系统级事件与图形渲染的联动,是构建稳定、交互精准的跨平台应用的关键。在Cocos2d-x等游戏引擎开发场景中,此问题尤为

weixin_30036289的博客 252

cocos2d-x 有关CCEditBox设置除输入框以外的可点击触发区域

欢迎各位童鞋转载,转载请注明出处:http://blog.csdn.net/song_hui_xiang 作者新浪微博:http://weibo.com/u/3168848533 作者腾讯微博:http://t.qq.com/song_huixiang 有时在用CCEditBox时,发现输入框比较小,不易玩家点击,用户体验比较差,所以就想通过点击输入框外的其它进行点击触发,下

song_hui_xiang 6803

【Cocos2d-x 3.x】 事件处理机制源码分析

触摸事件、相应事件监听器以及事件派发机制学习

Mccree的博客专栏 1658

Cocos2d-x:Cocos2d-x事件处理与碰撞检测

在Cocos2d-x中,自定义事件的实现主要通过类和类来完成。这允许开发者在游戏的不同部分之间传递信息,实现更复杂的交互逻辑。

kkchenjj的博客 899

ios 的EditBox点击空白处不隐藏的解决方案

原因:参数少了前缀CC 解决方案:修改 cocos/platform/ios/CCEAGLView-ios.mm 中的handleTouchesAfterKeyboardShow -(void) handleTouchesAfterKeyboardShow { NSArray *subviews = self.subviews; for...

weixin_30627381的博客 260

cocos2dx2.2.6 + VS2013 最简单的键盘控制

通过上下左右控制人物

cocos2dx 实现应用内屏幕旋转,ios端弹出虚拟键盘导致界面显示异常的问题

  项目上遇到这样的需求,总体界面要横屏,但是部分界面需要切换到竖屏,同时横竖屏的界面都会有编辑框。   网上目前有很多资料涉及到这个的,安卓端实现很简单,横竖屏切换两三行代码就可以实现;ios端网上目前也有方案,比安卓稍微复杂点,但是也可以实现。但是涉及到界面上有编辑框,会弹出输入键盘的时候,ios端的界面就会出现异常。目前引擎对于编辑框的处理,在弹出键盘的时候,整体的ui界面会上移,使输入区...

weixin_34021089的博客 1761

从车机到广告屏:CS5523芯片在5大显示场景的应用方案全解析

本文全面解析了CS5523芯片在车载显示、数字广告机、医疗设备和工业HMI等五大场景的应用方案。作为高性能MIPI转eDP芯片,CS5523凭借出色的兼容性和低功耗特性,成为国产替代方案的优选。文章详细介绍了芯片架构、核心技术及实际应用中的设计要点,为工程师提供全面的技术参考。

julia4scientist的博客 902

AI大模型学习(14)AI 小白入门!用 OpenCV+Python 打造人体姿态识别系统,超详细教程来了

这篇教程介绍了如何使用Python+OpenCV+MediaPipe搭建入门级人体姿态识别系统。主要内容包括:人体姿态识别的应用场景(如健身APP、体感游戏)、开发环境搭建(安装Python、OpenCV和MediaPipe库)、核心代码实现(通过30行代码完成摄像头姿态检测),以及进阶功能开发(深蹲动作纠正算法和PPT体感控制器)。教程详细解析了MediaPipe的BlazePose模型架构和33个关键点的生理学意义,并提供了多线程优化等性能提升方案。该项目适合AI初学者实践,无需复杂算法即可实现实时人体

isoft888的专栏,致力于C#/python分享物联网、大数据,神经网络的等领域,欢迎讨论交流! 1551

关于Cocos2d-x程序运行时候提示关闭程序的框框的解决方法

1.这个情况是资源没有被加载的表现 如果AppDelegate.cpp里面没有文件索引的语句 FileUtils::getInstance()->addSearchPath("res");,就更加说明是资源找不到的问题 解决方法 把资源直接复制在Resources文件的根目录下,不要放在Resources/Res目录下。     2.可能是实例化对象类的init方法中没有重写父类...

weixin_34166472的博客 184

从Xilinx FPGA到MIPI DSI LCD屏:手撸代码的实战经验分享

本文分享了使用Xilinx FPGA驱动MIPI DSI LCD屏的实战经验。作者从依赖官方IP核失败,到与底层D-PHY IP缠斗,最终通过手撸代码,直接配置GTY收发器原语并实现完整的D-PHY与DSI协议栈,成功点亮屏幕。文章详细剖析了协议细节、Vivado工具链的调试技巧与避坑指南,为FPGA工程师提供了从理论到实践的宝贵参考。

weixin_29188997的博客 399

Cocos2d-x游戏开发之处理单点触摸事件

cocos2d-x的触摸事件有多种方式,单点触摸最为简单。 首先我们新建一个Cocos2d-win32 Application,转到HelloWorldScene.cpp的bool HelloWorld::init()方法,里边有一个do…while(0)的循环,把循环里边bRet = true;之前的代码全部注释掉,然后在bRet = true;之前的位置添加代码: this->se

liliangchw的专栏 4160

Arduino for ESP32-----ESP-NOW介绍及使用

ESP-NOWESP-NOW介绍ESP-NOW支持以下特性ESP-NOW技术也存在以下局限性获取ESP32的MAC地址ESP-NOW单向通信(One-way communication)ESP32单板间的双向通信一对多通信(一发多收)一对多通信(多发一收) ESP-NOW介绍 ESP-NOW是一种由Espressif开发的协议,可以让多个设备在不使用Wi-Fi的情况下相互通信。该协议类似于低功耗的2.4GHz无线连接。设备之间的配对需要在通信之前完成。配对完成后,连接是安全的、点对点的,不需要握手。这意味着

Better_man1的博客 2万+

ArcGIS JS 态势标绘教程:直箭头(Straight Arrow)

ArcGIS JS 态势标绘教程:直箭头(Straight Arrow)。

非科班Java出身GISer的博客 705

Cocos2d-x Win32键盘模拟触摸事件

​Cocos2d-x支持在Win32下鼠标的单击进行模拟响应触摸事件,也即只支持模拟单点触摸。在之前的文章《如何制作一个横版格斗过关游戏 Cocos2d-x 2.0.4》中带有方向键和攻击键,鼠标的单点触摸已经不能满足在Win32下进行测试的要求,在这里进行扩展让键盘同时模拟响应触摸事件。 Cocos2d-x版本:2.1.3 修改proj.win32文件夹的main.cpp,改后文件内容如下:

无幻 9152

CCF编程培训师资认证(PTA)标准(教学能力T)

随着计算机科学的不断发展,计算机相关技术应用到社会各个行业,越来越多的青少年参加到了计算机程序设计的学习中,这对编程培训教师提出了更高的专业要求和职业要求。CCF开展编程培训师资认证项目(Programming Trainer Accreditation,PTA),旨在建立一个规范的、科学的、权威且有公信力的三方认证。认证考试分编程专业能力(P)和教学能力(T)两部分。本标准根据《CCF编程培训师资认证条例》第十条制定,旨在明确教学能力(T)的测试标准。

lan_in的博客 1709

Cocos2d-X 3.x 事件分发机制详解

Cocos2d-X 3.x 事件分发机制详解

水上漂的专栏 1万+

Coze智能体开发:扣子空间制作PPT功能

扣子空间内置了丰富的场景模板,涵盖人文历史、学术分享、研究报告、数据分析等场景,可以满足不同用户的需求。 你只需输入与制作 PPT 相关的提示词,Agent 就能基于这些提示词展示思考的过程,并自动生成完整的 PPT。

王国平的博客 2052

Coze 上 OpenClaw 完整使用攻略(零代码 + 24 小时在线 + 飞书 / 微信接入)

Coze(扣子)是目前国内零门槛部署 OpenClaw 最友好的平台,无需服务器、不用命令行,5 分钟即可拥有可执行本地 / 云端任务的 AI 助手,还能一键发布到飞书、微信、钉钉等 IM。

hy行者勇哥的博客 2922

Cocos2d-x 触摸事件层级关系

下面介绍一个跟触摸事件优先级层级关系的问题: 我自定义了一个精灵类,而且这个精灵类对象可以接收触摸事件;然后我还在这个自定义的精灵中添加了一个CCEditBox输入框。那么这个时候就要小心处理这二者之间接收触摸事件的优先级。 假如对自定义精灵注册触摸事件是: CCDirector::sharedDirector()->getTouchDispatcher()->addTarget

小邓笔记 4563

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Cocos2d-x 监听事件整理

1 键盘事件监听 local function onKeyReleased(keyCode, event) local label = event:getCurrentTarget() if keyCode == cc.KeyCode.KEY_BACK then label:setString("BACK clicked!") elseif keyCode == cc.KeyCode.KEY_MENU then label:setString("

汐客SeaKr的博客 729

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Cocos2d-x 用户事件处理机制

在移动平台中设备与用户的交互必须通过事件处理完成。用户输入被封装为事件,Cocos2d-x游戏引擎能够接收并处理这些事件,包括触摸事件、键盘事件、鼠标事件、加速度事件和自定义事件等。这里需要注意,不同平台之间事件略有差异,这与硬件有关,如在iOS 平台就无法接收键盘事件,在PC和Mac OS X平台无法接收触摸事件和加速度事件。Cocos2d-x 用户事件处理机制 一般来说,事件处理机制都有三个

不很正派的专栏 8119

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

cocos2d-x-3.1 事件分发机制 (coco2d-x 学习笔记七)

触摸事件

x病毒的专栏 1802
上一篇: Cocos2d-x游戏开发之三 NODE_FUNC和CREATE_FUNC说明
下一篇: Cocos2d-x游戏开发之Mac下配置Android NDK环境并搭建Cocos2d-x环境 若干问题
CJsen
博客等级 码龄17年 46粉丝 53原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值