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之类的, 还有统计信息, 统计总过画了多少帧, 帧率是多少等功能.

  • 相关阅读:
    图片上传-下载-删除等图片管理的若干经验总结3-单一业务场景的完整解决方案
    图片上传-下载-删除等图片管理的若干经验总结2
    HDU 1195 Open the Lock
    HDU 1690 Bus System
    HDU 2647 Reward
    HDU 2680 Choose the best route
    HDU 1596 find the safest road
    POJ 1904 King's Quest
    CDOJ 889 Battle for Silver
    CDOJ 888 Absurdistan Roads
  • 原文地址:https://www.cnblogs.com/zhepama/p/3167528.html
Copyright © 2011-2022 走看看