Objc中触摸处理阻塞时消息派送的问题

在游戏场景中添加了touchBegan的处理:

-(void)touchBegan:(CCTouch *)touch withEvent:(CCTouchEvent *)event{
    if ([self isTalking]) {
        [_chatBox advanceTextOrHide];
        return;
    }
    //其他代码

如果玩家正在和NPC对话,则继续交谈.一切正常.

但是如果advanceTextOrHide被阻塞一段时间再返回的话,下一次点击屏幕却无法进入touchBegan回调的处理中.只有第二次点击屏幕才会进入.所以玩家必须多点击一次屏幕,虽然只是一点小瑕疵,但也是不能忍受的 ;[

问题是为什么第一次点击后没有激活回调?代码流跑道哪里去了?答案是代码跑到touchEnded里面去了!

我的推测是当touchBegan被阻塞一段时间后,与之对应的touchEnded不再被调用.而是等到下一次点击屏幕时才被”补上”.等于是想把它丢掉又不能丢,得找个机会把它补上才行.

时间: 2024-10-26 05:44:40

Objc中触摸处理阻塞时消息派送的问题的相关文章

Android自定义View研究--View中的原点坐标和XML中布局自定义View时View触摸原点问题

这里只做个汇总~.~独一无二 文章出处:http://blog.csdn.net/djy1992/article/details/9715047 Android自定义View研究--View中的原点坐标相关问题 我们自定义了View,但是有没想过一个问题,就是View中的(0,0)坐标,也就是原点坐标在哪??我们是不是有时候很困惑,接下来我们就来研究View中的原点坐标相关的问题. 一.new DuView时View的原点 我们通过从View中绘制一条从原点到右下角的线来看看这个View中的原点

解析iOS10中的极光推送消息的适配_IOS

iOS10发布后,发现项目中的极光推送接收消息异常了. 查了相关资料后才发现,iOS10中对于通知做了不少改变.同时也发现极光也很快更新了对应的SDK. 现在就把适配修改的做法分享一下,希望对有需要的童鞋有所帮助. 具体做法如下: 注意:必须先安装Xcode8.0版本. 一.添加相关的SKD,或framework文件 1.添加UserNotification.framework 2.更新jpush的SDK(最新版本:jpush-ios-2.1.9.a)https://www.jiguang.cn

C#开发WINDOWS应用程序时消息的处理

window|程序 WINDOWS应用程序是靠消息驱动的,在VC中我们通过CLASSWIZARD可以为某窗口类添加消息处理函数,CLASSWIZARD将为你添加消息映射,对于WINDOWS消息,生成的消息处理函数重载了基类的虚拟方法.而在C#中如何处理消息呢?本文针对VS.NET BETA1环境下的C#简单地介绍WINDOWS消息以及自定义消息的处理方法. 示例代码下载 17K 一.生成一个名为MSGApplication的工程 工程的建立方法请参考:C#学习笔记之一 二.处理WM_PAINT消

android中ListView数据刷新时的同步方法

  本文实例讲述了android中ListView数据刷新时的同步方法.分享给大家供大家参考.具体实现方法如下: ? 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

Objc中处理数组越界的一种办法

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Objc的数组如果在访问时索引非法,则会抛出NSRangeException异常,貌似没有妥协的办法. 这个不像ruby,对于数组的访问有2套API,一种和Objc类似非法异常铁定报错;另外一种出现异常只是返回一个非法的值,这也很方便,尤其在某些情况下. 一般的在Objc中如果想要处理这种情况,可以在每次访问前检查Index是否合法,但还有一种方法,就是写捕获

线程-从SurfaceView类中向主UI发送消息

问题描述 从SurfaceView类中向主UI发送消息 我想在子线程的子类中向UI线程发送消息更新界面. 首先成功了一个小例子: mainActivity{ Handler h = new @Override public void handleMessage(Message msg){ 一堆更新UI操作... }; Runnable r = new Runnable() { @Override public void run() { subclass s = new subclass(h);

php-PHP中fread在等待时为什么会再建两次连接?

问题描述 PHP中fread在等待时为什么会再建两次连接? PHP中,我用pfsockopen和服务器建立了一个连接,然后用fwrite对连接进行发送,最后用fread等待服务器返回的数据. 但服务器那边如果没进行数据返回时,fread阻塞在那里,中间过程中服务器那边打印显示会再次accept到一个连接(服务器当前只会有这一个设备对其连接). 各位大神指导这个为什么吗,求解答呀,困惑好多天了?

深入解析 ObjC 中方法的结构

因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明. 在上一篇分析 isa 的文章从 NSObject 的初始化了解 isa中曾经说到过实例方法被调用时,会通过其持有 isa 指针寻找对应的类,然后在其中的 class_data_bits_t 中查找对应的方法,在这一篇文章中会介绍方法在 ObjC 中是如何存储方法的. 这篇文章的首先会根据 ObjC 源代码来分

Cocos2d-x中触摸事件

理解一个触摸事件可以从时间和空间两方面考虑. 1.触摸事件的时间方面 触摸事件的在时间方面如下图所示可以有不同的"按下"."移动"和"抬起"等阶段表示触摸是否刚刚开始.是否正在移动或处于静止状态以及何时结束也就是手指何时从屏幕抬起.此外触摸事件的不同阶段都可以有单点触摸或多点触摸是否支持多点触摸还要看设备和平台.   触摸事件有两个事件监听器EventListenerTouchOneByOne和EventListenerTouchAllAtOnc