Node::onEnter方法讲解
来源:互联网 发布:c语言自学需要什么软件 编辑:程序博客网 时间:2024/05/13 21:32
今天遇到一个问题,自己封装了一个精灵(继承了精灵类和目标代理),里边实现了一个动画效果,但是调用的时候却没有动画,只是静态的图片。和同事们反复研究后发现原来是在重写的onEnter中忘记了调用CCSprite::onEnter(),这是很多童鞋们容易忽略的问题,在重写cocos2d-x组件的时候,总是忘了调用一下要重写组件的方法,亲们一定要注意了哦。现在详细分析一下onEnter()这个方法。CCSprite直接调用了CCNode的onEnter(),由于CCLayer需要进行触屏事件的处理,所以重写了一下,处理了触屏事件,但是最终还是调用了CCNode::onEnter();最终问题都归结于CCNode::onEnter()大家先看下CCNode源码:void CCNode::onEnter(){arrayMakeObjectsPerformSelector(m_pChildren, &CCNode::onEnter);this->resumeSchedulerAndActions();m_bIsRunning = true;}void CCNode::onEnterTransitionDidFinish(){arrayMakeObjectsPerformSelector(m_pChildren, &CCNode::onEnterTransitionDidFinish);}void CCNode::onExit(){this->pauseSchedulerAndActions();m_bIsRunning = false;arrayMakeObjectsPerformSelector(m_pChildren, &CCNode::onExit);}arrayMakeObjectsPerformSelector方法如下:void CCNode::arrayMakeObjectsPerformSelector(CCArray* pArray, callbackFunc func){if(pArray && pArray->count() > 0){CCObject* child;CCARRAY_FOREACH(pArray, child){CCNode* pNode = (CCNode*) child;if(pNode && (0 != func)){(pNode->*func)();}}}}
更进一步:
比如子弹的问题,当超过屏幕我们就从layer中 removeChild 将这个子弹移除掉。那么,是否有状态来判断这个子弹是否已经被移除了呢?
那就是通过 isRunning函数来判断,如果这个子弹还在layer中 那么isRunning返回true;如果调用了 layer->removeChild 那么isRunning则返回false;
那么 isRunning这个函数的状态是什么时候被设置的呢?
当调用CCLayer->addChild的时候 会调用CCNode.onEnter 在这里面会设置isRunning;
当调用CCLayer->removeChild的时候 会调用CCNode.onExit 在这里会重新清理isRunning;
这是一个非常好的标志用来判断
0 0
- Node::onEnter方法讲解
- [3]Cocos2d-x之Node的CREATE_FUNC、create、init、onEnter方法
- OnEnter()
- cocos2d-x onEnter方法介绍
- Cocos2dx-jsb 中Node的onEnter过程分析(1)
- Cocos2dx-jsb 中Node的onEnter过程分析(2):
- 【quick遇到的陷阱】node的onExit()和onEnter()
- init()和onEnter()方法的区别
- init()和onEnter()方法的区别
- [Cocos2d-x] init()和onEnter()方法的区别
- [Cocos2d-x] init()和onEnter()方法的区别
- [Cocos2d-x] init()和onEnter()方法的区别(转)
- [Cocos2d-x] init()和onEnter()方法的区别(转)
- [Cocos2d-x] init()和onEnter()方法的区别
- [Cocos2d-x] init()和onEnter()方法的区别
- Cocos2d-x-- init()和onEnter()方法的区别
- [Cocos2d-x] init()和onEnter()方法的区别(转)
- [Cocos2d-x] init()和onEnter()方法的区别
- **JAVASCRIPT**初识JavaScript
- Thinking in Java 第15章 泛型(15.5-15.19)
- Cocoa深入学习:NSOperationQueue、NSRunLoop和线程安全
- Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
- 去停用词
- Node::onEnter方法讲解
- Leetcode 208. Implement Trie (Prefix Tree)
- 格式化数字
- aside元素
- Target host is null、java.net.URISyntaxException的解决办法
- Maven学习总结(七)——eclipse中使用Maven创建Web项目
- Hive加载数据时遇到NULL数据错误的解决方法
- 异步批量加载图片
- 词频统计