本文为firedragonpzy原创,转载务必在明显处注明:
转载自【Softeware MyZone】原文链接: http://www.firedragonpzy.com.cn/index.php/archives/548
今天遇到一个问题,自己封装了一个精灵(继承了精灵类和目标代理),里边实现了一个动画效果,但是调用的时候却没有动画,只是静态的图片。和同事们反复研究后发现原来是在重写的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)();
}
}
}
}
在onEnter中调用方法arrayMakeObjectsPerformSelector,形参m_pChildren为子节点,&CCNode::onEnter为本函数的引用,在方法中遍历,最经典的就是(pNode->*func)(),性质似函数指针,详情可参考[url]http://firedragonpzy.iteye.com/blog/1615710[/url],未完,待续……
分享到:
相关推荐
- `CCNode::convertToWorldSpaceAR()` 和 `CCNode::convertToNodeSpaceAR()`:这两个方法类似,但它们考虑了节点的锚点位置,而不是默认的左下角。 在实际应用中,这些转换方法常常用于处理节点之间的相对位置、...
类之间的交互通过消息传递或者事件监听来完成,例如`CCEventDispatcher`用于监听和分发事件,`CCNode::addChild()`和`CCNode::removeChild()`用于添加和移除游戏对象。 3. Cocos2d-x关键概念: - Scene:游戏场景...
在`onEnter`方法中,我们创建并初始化`Player`和`HealthBar`对象,然后在`update`方法中每帧调用`healthBar->updateHealth(player->getHealth(), player->getMaxHealth());`以保持血条的实时更新。 项目中的`proj....
7. CCNode:节点类,作为所有可见对象的基类,具备坐标系统、变换矩阵等基本属性。 三、关键功能详解 1. 动画与动作:Cocos2D的动作系统是其一大亮点,如MoveTo、RotateTo、ScaleTo等,可以组合创建复杂的动画序列...
最后,我们可以通过`CCNode::addChild`方法将精灵添加到场景中,并通过监听Box2D的`b2World::Step`方法来更新精灵的位置,使其与刚体同步。 压缩包中的"Resources"目录可能包含了精灵图片和其他资源,如纹理精灵表...
3. CCNode:是所有图形对象的基类,包含位置、缩放、旋转等属性。 4. CCTexture2D:处理图像纹理,为精灵提供图像数据。 三、动作与效果 1. CCAction:定义了一系列操作,如移动、旋转、缩放、淡入淡出等,可以应用...
5. **执行动画**:最后,我们将`CCAnimate`动作应用到精灵上,使用`CCNode::runAction()`方法。这样,每当调用`step()`方法时,精灵就会根据`CCAnimate`的动作更新显示。 6. **控制动画播放**:你可以通过`...
【游戏滚动视图(GameScrollView)使用详解】 在Cocos2d-x游戏开发中,有时候我们需要实现类似关卡选择或内容浏览这样的滑动界面,此时GameScrollView就派上了用场。GameScrollView是基于Cocos2d-x扩展库(cocos2d:...
### Cocos2d-x 中文API部分文档:CCAction与CCActionManager类详解 #### CCAction 类 **概述** CCAction 是 Cocos2d-x 中用于处理动画效果的基础类,几乎所有的动画效果都是通过继承此类来实现的。该类提供了一...
4. CCNode:所有图形元素的基类,包括精灵、层、菜单等。 5. CCTouchDispatcher:处理用户触摸事件,让游戏响应用户的操作。 四、跑男游戏核心组件 1. 角色控制:通过Cocos2D的物理引擎,实现角色的跑动、跳跃等...
第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理...
第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理...
第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理...
《Cocos2d API详解:基于0.99版本》 Cocos2d是一个流行的开源游戏开发框架,尤其在iOS平台上被广泛使用。这个压缩包“cocos2d_api_0.99.zip”包含了针对cocos2d for iPhone 0.99版本的API文档,为开发者提供了详细...
当我们设置`CCNode`的位置时,实际上是在设置其锚点(anchor point)相对于父节点的位置。锚点是一个介于0和1之间的浮点数,代表了节点相对其自身边界的偏移。默认情况下,锚点位于节点的左上角(0,0),但可以通过`...
### cocos2d-android游戏引擎详解 #### 一、游戏引擎概览 游戏引擎是一套预构建的游戏开发系统,旨在简化游戏开发过程并提高效率。它为开发者提供了丰富的工具集,帮助他们无需从头开始就可以创建游戏。Cocos2d-...
MyBatis-Plus 的代码生成器,通过 CodeGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
5. **startWithTarget(CCNode *pTarget)**:开始执行动作,传入的目标对象是执行动作的CCNode实例。 6. **stop(void)**:停止动作。动作完成后会自动调用,但不应手动调用此方法,除非在特定动作如`CCSpeed`, `...
接着,使用`addTargetedDelegate()`方法添加触摸委托,该方法接受三个参数:你要添加的委托对象(通常是你的CCLayer或CCNode子类实例)、优先级(数字越小,优先级越高)以及是否独占触摸。例如: ```cpp ...