• cocos creator2.4.3 组件 节点 预制体


    一直没弄明白,这两者啥关系, 看了一下底层源码,大致知道了些。

    一个组件必然会挂到node上。 在脚本组件中通过this.node.getComponent获取组件。creator 提供了this.getComponent 方法

        getComponent (typeOrClassName) {
            return this.node.getComponent(typeOrClassName);
        },

    一个node由N个组件组成。通过this.getComponent获取组件

    一个预制体由N个节点组成。  一个预制体相当于一个复杂点节点或者具有特殊功能的一个节点集合。 任何节点都可以预制,预制出来可以反复应用。

    预制体可以包含其他预制体。

    组件没有继承节点,组件不是节点, 如果把人比作节点,那么组件就是人的基因, 有什么特征完全靠组件支持。

    cocos creator编辑器内置了很多组件, ccLable ccSprite等。

    说到这里,得总结一下: N个组件组合成一个节点.    N个子节点组合成策划产品要的东东。 引擎核心就是渲染这个东东。

    除了脚本组件, 基本上所有的组件都有自己的render.     如cc.Sprite render的是图片。  cc.Label draw的是文本字符串或者文字图像等

    关于mainloop:

    执行当前场景中所有组件的start, update, lateUpdate方法。

    遍历节点树,开始渲染。 最终会用canvas或者opengles绘画

    RenderFlow.render = function (rootNode, dt) {
        _batcher.reset();
        _batcher.walking = true;
    
        RenderFlow.visitRootNode(rootNode);
    
        _batcher.terminate();
        _batcher.walking = false;
    
        _forward.render(_batcher._renderScene, dt);
    };

    一个节点的处理流程和_renderFlag有关。

    function createFlow (flag, next) {
        let flow = new RenderFlow();
        flow._next = next || EMPTY_FLOW;
    
        switch (flag) {
            case DONOTHING: 
                flow._func = flow._doNothing;
                break;
            case BREAK_FLOW:
                flow._func = flow._doNothing;
                break;
            case LOCAL_TRANSFORM: 
                flow._func = flow._localTransform;
                break;
            case WORLD_TRANSFORM: 
                flow._func = flow._worldTransform;
                break;
            case OPACITY:
                flow._func = flow._opacity;
                break;
            case COLOR:
                flow._func = flow._color;
                break;
            case UPDATE_RENDER_DATA:
                flow._func = flow._updateRenderData;
                break;
            case RENDER: 
                flow._func = flow._render;
                break;
            case CHILDREN: 
                flow._func = flow._children;
                break;
            case POST_RENDER: 
                flow._func = flow._postRender;
                break;
        }
    
        return flow;
    }
  • 相关阅读:
    java泛型
    转载:MSIL Instruction Table
    What if your dynamic sql statement is too long?
    自己第一个正儿八经的div+css页面
    bulk insert formatFile格式记录
    日志 20071221(WCF,using keyword)
    C++点滴
    The scripts used to generate a demo "School" database (with data)
    The typical scenarios of using "Insert" in Tsql
    如何生成任意给定区间的随机值序列
  • 原文地址:https://www.cnblogs.com/dzqdzq/p/14952695.html
Copyright © 2020-2023  润新知