zoukankan      html  css  js  c++  java
  • 由引擎接口自顶向下的设计引擎结构

    从我的理解,一款引擎从功能上划分大致分为:基础系统,资源管理,io管理,内存管理,场景管理,材质管理,GUI,物理系统,渲染器,脚本接口层等,当我尝试将这些系统一个个的拼凑起来的时候,发现接口设计很费劲,就算把各个子系统之间的关系用图表示出来,也经常出现这样设计出来的接口却不是希望要的接口。

    “自顶向下”的设计在这里就显得很对症,引擎的实际用户实际上是脚本程序员,因此根据用户的需要定制接口是个好方法。

    比如:一个最简单的脚本demo是这样的:

    1 --创建一个角色
    2 player = CPlayer:new()
    3 player:Load("aaaa.player")
    4
    5 --创建一把武器
    6 weapon = CWeapon:new()
    7 weapon:Load("aaaa.weapon")
    8
    9 --创建一个特效
    10 effect = CEffect:new()
    11 effect:Load("aaaa.effect")
    12
    13 --特效设置给武器
    14 weapon:AddChild(effect)
    15
    16 --武器加到角色上
    17 player:AddChild(weapon)
    18
    19 --创建一个场景
    20 scene = sceneMgr:CreateScene("aaa.scene")
    21 --角色加到场景中
    22 scene:AddChild(player)
    23
    24 --角色跑路
    25 player:Move(scrPoint, dstPoint, speed)

    这里的CPlayer、CEffect、CWeapon之类的不一定是引擎导出类,也可以使脚本封装的。从这样一个脚本实例来看,就希望引擎的场景管理的节点树结构大致是个什么模样,也可以决定资源加载接口的大致模样。

    以此类推,也可以先写一些脚本实例来推广到其他各个子系统,以此来制定各个子系统的对外接口。引擎对外的脚本接口确定之后,再依据各子系统之间的关系,确定各子系统的内部关联接口。

  • 相关阅读:
    详细聊聊k8s deployment的滚动更新(一)
    更新k8s镜像版本的三种方式
    深入理解docker信号机制以及dumb-init的使用
    10分钟教你理解反射
    nodejs的交互式解释器模式常用命令
    nrm的安装和使用
    复杂sql语句之单字段分类count计数和多字段count计数
    navicat连接mysql出现2059
    mongodb常规操作语句
    System.Web.NullPointerException
  • 原文地址:https://www.cnblogs.com/konlil/p/2011224.html
Copyright © 2011-2022 走看看