zoukankan      html  css  js  c++  java
  • cocos2d 触摸响应失效

    今天碰到了一个奇怪的bug,记录下。

    // 头文件
    @interface A : CCLayer
    ...
    @end
    
    // 源文件
    @implementation A
    - (id)init{
        if(self = [super init]){
            ...
            [self setIsTouchEnabled:YES]; // 不等同于isTouchEnabled_ = YES
        }
    }
    @end

    问题描述:CCLayer默认遵循标准触摸协议,又在init中 执行了[self setIsTouchEnabled:YES];但是始终不能触发触摸响应函数。

    分析:经过调试,发现居然是CCLayer中的isRunning_为NO,以前倒是从没碰到过。而isRunning_只有在CCNode的-(void) onEnter;中才会置YES

    -(void) onEnter
    {
        [children_ makeObjectsPerformSelector:@selector(onEnter)];    
        [self resumeSchedulerAndActions];
        
        isRunning_ = YES;
    }

    但奇怪的是onEnter的isRunning_ = YES;没有执行到,而界面显示完全正常。

    仔细检查代码发现是其他地方的一个内存错误,但xCode没有警告。

    教训:一些自己写时不太容易犯的错误,如果存在复制的代码中,则不太容易检查出来,因为自己去看代码的时候是顺着代码的意思去看的,也没有去找错误的倾向。

  • 相关阅读:
    linux 计划任务
    linux 进程管理
    PHP中global与$GLOBALS['']的区别
    php预定义变量
    linux 强制终止进程命令
    mysql取某表中数据的随机的方法
    mysql 连接 选库 查询
    Python 的异步 IO:Asyncio 简介
    并发和并行的区别
    asyncio模块中的Future和Task
  • 原文地址:https://www.cnblogs.com/pure/p/2535237.html
Copyright © 2011-2022 走看看