zoukankan      html  css  js  c++  java
  • Cocos2d-html5 笔记2: director

    今天看了cocos2d-html5代码里面的Director.

    最简单的框架

    先抛开cocos2d的框架不说,对于一个游戏来说,基本的逻辑框架还是很简单的,首先初始化的时候注册mouse, touch之类的事件处理函数, 然后在on_XXX_event里面改变游戏的一些状态, 之后就更新重绘图。drawScrene根据game的state和data来把画面呈现出来, interval_time用来控制帧率。

    game={state, data}
    
    init()
        regist_XXX_event_handler(on_XXX_event);
        regist_timer_handler(on_timeout)
    
    run()
        while(game.state.running) {
            drawScrene();
            sleep(interval_time)
        }
    
    on_XXX_event()
        //change game state and data
    
    on_time_out()
        //animations, change game state or data.
    

    Director

    Cocos2d 的director最基本原理从逻辑上也和上面最基本的框架类似,但结构上比这个好多了, 它提供了场景切换的功能。

    run loop

    首先看一下游戏是怎么跑以来的, 在application.run里面会设置一个timer, 在timer的callback里面会去调用director的mainloop, mainloop也就去画一帧场景吧

    Application.run -->SetInterval(Director.mainloop, animationInterval)
    
    Director.mainloop --> Director.drawScrene --> Director.runningScrene.vist()
    

    Director.runningScrene.vist()这个会遍历Screne这个Node,把整个screne画出来

    然后director还提供了俩个函数,pause and resume, 在pause的时候会把animationInterval改大些,省的浪费Cpu, 在resume 的时候再改回去.

    Screne 管理

    director里面有个screne的stack,这样就可以对screne作push, pop, remove, replace等操作了, 这个和一般的堆栈操作没啥不同, 不过需要切换场景的时候需要通知screne.

    Director.setNextScene负责场景的切换,还有screne之间的切换效果, 比如从screne a 切换到screne b,

    首先通知a场景退出

    a.onExitTransitionDidStart()
    a.onExit()
    a.cleanup()
    

    然后通知b场景准备好了

    b.onEnter()
    b.onExitTransitionDidFinished()
    

    一般都是在onEnter里面把事件处理函数给注册好,然后在onExit的时候取消注册, 这儿用的是delegate的模式,screne和layer都是从Node派生出来的,Screne基本上没增加什么功能。 Layer添加了event delegate , timer schedule之类的功能, 一般写游戏都是从layer这边派生的.

    其他杂项

    Director它有点像一个大管家,一些比较全局的manager, 比如schedule, actionManager, EventDispather 这些也归他管 :), 还包含了一些设置Opengl state的一些函数像DepthTest, alphaBlending, projection之类的, 还有统计信息, 统计总过画了多少帧, 帧率是多少等功能.

  • 相关阅读:
    spring boot中创建ElasticSearch索引
    spring boot项目16:ElasticSearch-基础使用
    spring cloud项目07:网关(Gateway)(2)
    spring cloud项目06:网关(Gateway)(1)
    Ubuntu上MySQL多实例部署
    MySQL常用命令、配置汇总
    spring boot项目15:安全-基础使用(2)
    spring boot项目14:安全-基础使用(1)
    docker-compose mongodb 副本
    关于golang slice切片的一个问题
  • 原文地址:https://www.cnblogs.com/zhepama/p/3167528.html
Copyright © 2011-2022 走看看