`
fireDragonpzy
  • 浏览: 454248 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

CCNode::onEnter()详解

阅读更多
本文为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],未完,待续……
分享到:
评论

相关推荐

    Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系

    - `CCNode::convertToWorldSpaceAR()` 和 `CCNode::convertToNodeSpaceAR()`:这两个方法类似,但它们考虑了节点的锚点位置,而不是默认的左下角。 在实际应用中,这些转换方法常常用于处理节点之间的相对位置、...

    Last Stand代码

    类之间的交互通过消息传递或者事件监听来完成,例如`CCEventDispatcher`用于监听和分发事件,`CCNode::addChild()`和`CCNode::removeChild()`用于添加和移除游戏对象。 3. Cocos2d-x关键概念: - Scene:游戏场景...

    Cocos2D游戏之旅(二):主角血条的实现

    在`onEnter`方法中,我们创建并初始化`Player`和`HealthBar`对象,然后在`update`方法中每帧调用`healthBar->updateHealth(player->getHealth(), player->getMaxHealth());`以保持血条的实时更新。 项目中的`proj....

    IOS应用源码之cocos2d-cocos2d-iphone-Release_1.1-88-g95fc5a4.zip

    7. CCNode:节点类,作为所有可见对象的基类,具备坐标系统、变换矩阵等基本属性。 三、关键功能详解 1. 动画与动作:Cocos2D的动作系统是其一大亮点,如MoveTo、RotateTo、ScaleTo等,可以组合创建复杂的动画序列...

    Box2D刚体绑定精灵

    最后,我们可以通过`CCNode::addChild`方法将精灵添加到场景中,并通过监听Box2D的`b2World::Step`方法来更新精灵的位置,使其与刚体同步。 压缩包中的"Resources"目录可能包含了精灵图片和其他资源,如纹理精灵表...

    cocos2d-3.0 api文档

    3. CCNode:是所有图形对象的基类,包含位置、缩放、旋转等属性。 4. CCTexture2D:处理图像纹理,为精灵提供图像数据。 三、动作与效果 1. CCAction:定义了一系列操作,如移动、旋转、缩放、淡入淡出等,可以应用...

    Cocos2d-x人物奔跑动画

    5. **执行动画**:最后,我们将`CCAnimate`动作应用到精灵上,使用`CCNode::runAction()`方法。这样,每当调用`step()`方法时,精灵就会根据`CCAnimate`的动作更新显示。 6. **控制动画播放**:你可以通过`...

    使用大纲2

    【游戏滚动视图(GameScrollView)使用详解】 在Cocos2d-x游戏开发中,有时候我们需要实现类似关卡选择或内容浏览这样的滑动界面,此时GameScrollView就派上了用场。GameScrollView是基于Cocos2d-x扩展库(cocos2d:...

    Running-Boy:基于 Cocos2D 的 iOS 游戏

    4. CCNode:所有图形元素的基类,包括精灵、层、菜单等。 5. CCTouchDispatcher:处理用户触摸事件,让游戏响应用户的操作。 四、跑男游戏核心组件 1. 角色控制:通过Cocos2D的物理引擎,实现角色的跑动、跳跃等...

    Cocos2d x手机游戏开发与项目实战详解.part2

     第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理...

    Cocos2d x手机游戏开发与项目实战详解.part3

     第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理...

    Cocos2d x手机游戏开发与项目实战详解.part1

     第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理...

    cocos2d_api_0.99.zip

    《Cocos2d API详解:基于0.99版本》 Cocos2d是一个流行的开源游戏开发框架,尤其在iOS平台上被广泛使用。这个压缩包“cocos2d_api_0.99.zip”包含了针对cocos2d for iPhone 0.99版本的API文档,为开发者提供了详细...

    详解iOS游戏开发中Cocos2D的坐标位置关系

    当我们设置`CCNode`的位置时,实际上是在设置其锚点(anchor point)相对于父节点的位置。锚点是一个介于0和1之间的浮点数,代表了节点相对其自身边界的偏移。默认情况下,锚点位于节点的左上角(0,0),但可以通过`...

    cocos2d-android

    ### cocos2d-android游戏引擎详解 #### 一、游戏引擎概览 游戏引擎是一套预构建的游戏开发系统,旨在简化游戏开发过程并提高效率。它为开发者提供了丰富的工具集,帮助他们无需从头开始就可以创建游戏。Cocos2d-...

    CodeGenerator.java

    MyBatis-Plus 的代码生成器,通过 CodeGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

    Cocos2d-x 中文API部分文档

    5. **startWithTarget(CCNode *pTarget)**:开始执行动作,传入的目标对象是执行动作的CCNode实例。 6. **stop(void)**:停止动作。动作完成后会自动调用,但不应手动调用此方法,除非在特定动作如`CCSpeed`, `...

    添加触摸的两种方式1

    接着,使用`addTargetedDelegate()`方法添加触摸委托,该方法接受三个参数:你要添加的委托对象(通常是你的CCLayer或CCNode子类实例)、优先级(数字越小,优先级越高)以及是否独占触摸。例如: ```cpp ...

Global site tag (gtag.js) - Google Analytics