cocos2dx实现全局游戏公告

最刚开始分平台调用原生的提示,但是由于项目之后要显示的内容变的复杂,只好研究一下全局的游戏公告该怎么显示了。

直接addChild的是行不通的,或者处理起来比较繁琐,因为每次切换scene都会清空。

研究了一下cocos2dx的渲染机制。

入口:

CCApplication::sharedApplication()->run()

CCDirecor会周期执行一个mainLoop

int CCApplication::run()
{
    PVRFrameEnableControlWindow(false);

    // Main message loop:
    MSG msg;
    LARGE_INTEGER nFreq;
    LARGE_INTEGER nLast;
    LARGE_INTEGER nNow;

    QueryPerformanceFrequency(&nFreq);
    QueryPerformanceCounter(&nLast);

    // Initialize instance and cocos2d.
    if (!applicationDidFinishLaunching())
    {
        return 0;
    }

    CCEGLView* pMainWnd = CCEGLView::sharedOpenGLView();
    pMainWnd->centerWindow();
    ShowWindow(pMainWnd->getHWnd(), SW_SHOW);

    while (1)
    {
        if (! PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            // Get current time tick.
            QueryPerformanceCounter(&nNow);

            // If it's the time to draw next frame, draw it, else sleep a while.
            if (nNow.QuadPart - nLast.QuadPart > m_nAnimationInterval.QuadPart)
            {
                nLast.QuadPart = nNow.QuadPart;
                CCDirector::sharedDirector()->mainLoop();
            }
            else
            {
                Sleep(0);
            }
            continue;
        }

        if (WM_QUIT == msg.message)
        {
            // Quit message loop.
            break;
        }

        // Deal with windows message.
        if (! m_hAccelTable || ! TranslateAccelerator(msg.hwnd, m_hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}

mainLoop里面又会draw当前的scene:

void CCDisplayLinkDirector::mainLoop(void)
{
    if (m_bPurgeDirecotorInNextLoop)
    {
        m_bPurgeDirecotorInNextLoop = false;
        purgeDirector();
    }
    else if (! m_bInvalid)
     {
         drawScene();

         // release the objects
         CCPoolManager::sharedPoolManager()->pop();
     }
}

重点是在drawScene里面有一个m_pNotificationNode:

// Draw the Scene
void CCDirector::drawScene(void)
{
    // calculate "global" dt
    calculateDeltaTime();

    //tick before glClear: issue #533
    if (! m_bPaused)
    {
        m_pScheduler->update(m_fDeltaTime);
    }

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    /* to avoid flickr, nextScene MUST be here: after tick and before draw.
     XXX: Which bug is this one. It seems that it can't be reproduced with v0.9 */
    if (m_pNextScene)
    {
        setNextScene();
    }

    kmGLPushMatrix();

    // draw the scene
    if (m_pRunningScene)
    {
        m_pRunningScene->visit();
    }

    // draw the notifications node
    if (m_pNotificationNode)
    {
        m_pNotificationNode->visit();
    }

    if (m_bDisplayStats)
    {
        showStats();
    }

    kmGLPopMatrix();

    m_uTotalFrames++;

    // swap buffers
    if (m_pobOpenGLView)
    {
        m_pobOpenGLView->swapBuffers();
    }

    if (m_bDisplayStats)
    {
        calculateMPF();
    }
}

查看m_pNotificationNode定义

 /* This object will be visited after the scene. Useful to hook a notification node */
    CCNode *m_pNotificationNode;

所以创建一个游戏公告层:

NoticeBoard* noticeBoard = NoticeBoard::create();
	pDirector->setNotificationNode(noticeBoard);

这样两行代码就可以实现全局的游戏公告,不受切换场景的影响了。

时间: 2024-08-18 02:10:15

cocos2dx实现全局游戏公告的相关文章

7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格

重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已经多次提到 Cocos2d-x 源自于 Cocos2d-iPhone.Cocos2d-iPhone 是一个十分出色的游戏引擎,很多优秀的 iOS平面游戏都基于 Cocos2d-iPhone 开发,而它的实现语言是 Objective-C.因此,Cocos2d-x 也就沿袭了 Objective-C

18、Cocos2dx 3.0游戏开发找小三之cocos2d-x,请问你是怎么调度的咩

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478251 Cocos2d 的一大特色就是提供了事件驱动的游戏框架, 引擎会在合适的时候调用事件处理函数,我们只需要在函数中添加对各种游戏事件的处理, 就可以完成一个完整的游戏了. 例如,为了实现游戏的动态变化,Cocos2d 提供了两种定时器事件: 为了响应用户输入,Cocos2d 提供了触摸事件和传感器事件: 此外,Cocos2d 还提供了一系列

7、Cocos2dx 3.0游戏开发找小三之3.0版本的代码风格

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已经多次提到 Cocos2d-x 源自于 Cocos2d-iPhone.Cocos2d-iPhone 是一个十分出色的游戏引擎,许多优秀的 iOS平面游戏都基于 Cocos2d-iPhone 开发,而它的实现语言是 Objective-C.因此,Cocos2d-x 也就沿袭了 Objective-C 的

Cocos2d-x 3.x游戏开发之旅

Cocos2d-x 3.x游戏开发之旅 钟迪龙 著   ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x 3.x游戏开发之旅>是<Cocos2d-x游戏开发之旅>的升级版,修改了Cocos2d-x 2.0版进阶到3.0版后的一些内容,新增了对CocoStudio.UI编辑器.Cocos2d-x 3.x新特性以及网络方面的知识点.主要介绍常用的API使用方式:如何通过官方Demo获取更多关于Coc

13、Cocos2dx 3.0游戏开发找小三之3.0中的Director :郝萌主,一统江湖

重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706967 游戏中的基本元素 在曾经文章中.我们具体介绍了游戏开发的概念以及 Cocos2d-x 与其它游戏引擎的不同之处,甚至已经学会了它与众不同的 内存管理机制. 想必大家已经非常期待開始探索 Cocos2d-x 游戏开发的世界了. 在后面的文章中,我们将结合详细的实例,从 Cocos2d-x 游戏开发的基本元素讲起. 从这章開始,我会在学习引

Cocos2d-x+3.x游戏开发实战pdf

下载地址:网盘下载 内容简介  · · · · · · <Cocos2d-x 3.x游戏开发实战>是一本介绍Cocos2d-x游戏引擎的实用图书,全面介绍了最新的Cocos2d-x 3.2游戏引擎各方面的知识. <Cocos2d-x 3.x游戏开发实战>从内容层次上可分为四个部分.第一部分介绍了游戏开发的基础知识.游戏引擎概念.Cocos2d-x的下载与安装,以及跨平台开发环境的搭建.第二部分介绍了Cocos2d-x中的核心类.动作.动画.3D特效.文字.字体.菜单.事件处理.UI

cocos2dx塔防游戏逻辑

cocos2dx 塔防游戏逻辑 1.欢迎界面 2.tield制作游戏地图,空块设置cantouch属性为1 3.设置地图锚点,把锚点加入一个锚点容器,给怪物的行走函数传入 该锚点容器参数,让怪物按照锚点行走 4.创建炮塔(触摸坐标转地图,转炮塔数组坐标) 先检查触摸开始位置是否可以创建炮塔,然后创建炮塔选择界面,位置是整块 再根据触摸的选择位于哪一块上,确定创建哪个炮塔 5.碰撞检测,将死亡的敌人加入死亡敌人容器,并且遍历移除 将已碰撞的子弹加入移除子弹容器,并遍历移除 6. 炮塔基类(炮塔分3

14、Cocos2dx 3.0游戏开发找小三之Scene and Layer:一场游戏一场梦

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30474393 Scene :场景 了解了Director 之后,接下来介绍 Scene 这个与它紧密相关的游戏组件. 通过之前的学习,我们已经了解了场景以及它在流程控制中的地位. 在 Cocos2d-x 中,Scene 定义了一个场景.场景只是层的容器,包含了所有需要显示的游戏元素. 因此相对于其他游戏元素,Scene 并没有提供什么特别的功能,就是一

15、Cocos2dx 3.0游戏开发找小三之Sprite:每个精灵都是上辈子折翼的天使

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30475395 Sprite Sprite 可以说是游戏中最重要的组成元素: 它描述了游戏中的精灵,是 Node 的一个最重要也最灵活的子类. Sprite 很重要,它代表了游戏中一个最小的可见单位, 同时Sprite 也很灵活,它装载了一个平面纹理,具有丰富的表现力,而且 可以通过多种方式加载. 如果说 Scene 和 Layer 代表了宏观的游戏元素