vim:shiftwidth=8:foldmethod=indent:autoindent:
. AS3 框架研究
. hproof, 2011.3.27
. 客户端开发方案确定
. 依据
. 比较各开源引擎, 找到合适的框架
. 列出 优缺点, 有分析数据更好
. 游戏框架
. BulkLoader -- 加载器, 绝对好使
. puremvc -- MVC 主框架, 也可以经过改良
. TweenLite -- 缓动
. filters -- 各种滤镜效果
. aswing/bit101/fireice
. scp -- 游戏引擎
. 编辑器
. 角色编辑器
. avatar, 动作
. 技能编辑器
. 魔法/技能 攻击效果 . 场景编辑器 . 地图编辑
. 场景物体编辑
. 障碍物编辑
. 引擎内容
. 界面库
. aswing
. fireice
. lovefox
. 2D游戏引擎
. scp
. 应用层
. pureMVC
. 编辑器: 场景, 游戏(所有场景), 人物/动物/NPC, 效果
. aswing
. air
. 编辑器职责:
客户端: 地图场景, 人物/技能/动作/特效(动画/声音), 事件关联
服务端: AI脚本, 任务, 道具装备, 技能, 等...
其它: UI, 声音
人物: 技能 - 动作
动作: 身影
MVC 模型, 一套数据, 多个显示(人物)模式
. 如何方便在 FLASH 中设计界面?
. FLASH 中统一设计, 不涉及具体的实现. 后期用 武侠/ASWING 等都可以兼容
. 测试器
. 测试地图/效果/人物 等简单数据的软件
. 其它
. 发布器, 压缩/加密
. UI 资源确定
. XML + SWF 方式, XML 中描述各皮肤的定义
. 界面方案
. aswing
. 研究性能花费
. 比较 flex 嵌入图片, 和 flash swf 压缩的方案
. 武侠方案(flash 中设计界面)
. 检查是否支持 9grid 缩放 // 不支持
. 区分 基础控件, 应用层空间
. swf 中不包含任何文字, 方便多语言版本
. 代码中支持简单布局管理(如果不使用 aswing)
. 折中方案
. 关键: 9切片缩放
. flash CS3/CS4 不支持 -- 不支持!
. flash cs5 待验证 -- 不支持!
. fb4 是支持的 -- 如果仅 FB4 支持, 则界面可视化设计是个问题
. SWF
. 皮肤库: 包含 按钮/滚动条/位图 等 原始图片, 用元件名标识
. 控件库: 使用各皮肤, 组织而成的控件, 定义了各控件的样子
. 界面库: 使用各控件/皮肤 而成的界面. 支持直接使用, 或者导出XML
. 要求: 不包含任何文字, 支持9切片缩放 // 待验证9切片, 可能需要 CS5 支持
. 代码
. 加载皮肤库 (皮肤/控件)
. 以 XML/SWF/代码 方式建立界面
. 依test_bit101();赖于 aswing 或者 其它/自定义 UI 引擎
. 自定义 ASWING, 精简版. 参照其结构/思想
. 必须的
. 分散图片资源, 皮肤库
. 代码部分, 可以用 aswing, libraui, bit101. 但武侠中方便在 FLASH 中设计 UI, 然后导出为 XML/SWF
. 导出 XML, 代码中根据 XML 来建立
. 类似 CheckBox 只需要定义 各背景图片, 实际的效果, 无法在 FLASH 中看到???
. 综合考虑
. 提取现有库
. 使用开源库
. 利用 librui 增加自己的皮肤 ???
. 皮肤类, 可以从 SWF 中获取皮肤定义
. 基本类库
. 最新方案
. wuxia ui
. 利用武侠现有 uires 进行改进, 补充
. assert.swf 包含基本材质
. 基本材质(位图)
. 按钮图片
. 面板背景
. 底图花纹
. 标题栏
. 复合元件 -- 每个不同的风格, 独立一个元件定义
. 按钮: 各种状态
. 列表: 列表头, 选择框, 背景色(多套)
. ui.swf 中包含各界面定义
. 从 assert.swf 中引入元件进行布局
. 用 JSFL 导出为 XML
. skin
. layout
. component
. 参考 aswing
. component
. component
. Container
. updateUI()
. JButton // M, C
. JLable
. JScrollBar
. ui
. ButonUI // V
. layout
.
. manager
. UIManager
. 加载 asset
. 解析 xml
. 建立各 component
. DragDropManager
. _floatLayer
. TipsManager
. _floatLayer
. UIRes
. 提供对 Containter 的工具类
. 开发日程 共 61 + 20 = 81 天, 3 个月开发 + 1个月机动 = 4个月框架时间
. 开发计划制定 1
. 前期准备 3
. 第一里程碑 - 引擎开发 80
. UI 界面引擎 19
. 方案分析确定 3
. FLASH 规范制定 1
. 管理器实现 3
. 控件设计 5
. JSFL 插件 2
. 测试 5
. 2D 游戏引擎 28
. 技术分析/验证 3
. 设计框架 3
. 资源策略 2
. 地图系统 5
. 人物系统 5
. 效果系统 5
. 测试 5
. 编辑器开发 18
. 准备/熟悉 3
. 角色 5
. 技能 5
. 效果 5
. 数据准备 5
. 测试/机动 10
. 第二里程碑 - 基本功能 56
. 资源准备 5
. 人物资源
. 效果资源
. 界面资源
. 数据
. 角色系统 3
. 创建/选择
. 地图系统 3
. 地图漫游
. 主界面 2
. 角色属性
. 聊天系统 5
. 包裹系统 3
. 整理/拆分/合并/移动/丢弃
. 换装系统 5
. 武器/衣服/帽子
. 技能系统 5
. 学习/升级/装备
. 技能栏
. 战斗系统 15
. PVP/PVE
. 技能 使用/特效
. BUFF 效果
. 补给品使用
. 测试 10
. 第三里程碑 - 生活系统
. 队伍
. 好友
. 商店
. 仓库
. 拍卖行/集市
. 邮件
. 生活技能
. 采集/烹饪/打造/附魔/...
. 宠物
. 成长
. 挂机
. 修炼
. 情侣
. 第四里程碑 - 大型活动
. 战场
. 副本
. 城战
. 竞技场
. 战队
. 跨服战场
. 功能需求
. 界面库
. 参照 aswing/傲剑/武侠/仙侠 的实现, 尽量复用现有代码
. 建立 皮肤 作为最小单元, 方便共享
. 界面由 FLASH 设计, 导出 XML 配置信息
. 支持 皮肤/布局, 支持动态尺寸调整
. 强大的界面功能, 可提高后期开发效率
. tips 功能, 支持..子控件的提取
. 游戏引擎
. 参照 仙境/傲剑
. 使用位图复制绘制
. 地图系统先按照 傲剑, 使用整张场景背景图
. 记录 资源加载, 游戏进入 的详细日志
. 编辑器/数据格式
. 时间跨度很长, 需先确定数据, 并在后期不断调整
. 加载流程
. GameLoader
. 进度条, 载入 GameLib
. GameLib
. 各共享库, 如: aswing, greensocket, draw
. 载入各 gameUI
. GameUI
. 应用层各 gameUI
. 支持 立即/延时加载
. resources
. 零散资源, 如 图标/地图/avatar
. 功能分布
. GameLoader -- 加载器. 加密/解密
. Game -- 干嘛用的?
. CodeLib -- 开源库
. ui-lib
. game-lib
. TweenMax
. pureMVC
. Config -- 游戏数据
. skilleffect
. goodmodel
. goodsdc
. hiddenweapons
. horsemodel + pet, horse
. sceneMonster, trans
. monstermodel
. npc, trans
. skii
. task
. skin -- 界面数据
. ui
. loginui
. sceneRes
. res/data
. avatar
. iconitp85KnLnlmo
. map
. maps
. mc
. sound
. uiRes
. 角色创建界面时的零散图片
. RSL
. 动态加载库
. 过程:LayoutManager
. 编译好 swc
. 新建一个 swf, 设置项目属性, 导入 swc
. 该 swf 可以做为 dll 被加载了. -- 就是把 swc 转换为 swf
. 使用方, 链接目标 swf, 选择外部链接
. 界面框架比较
. 武侠库
. 最简单的, 最熟悉
. 使用 FLASH 组件?
. aswing
. 较复杂, 美工可能不太会使用
. 但确实很强大, 如何与 FLASH 设计人员结合是个问题
. 设一个桥接器? 把 SWF 皮肤转换为 LAF, 然后根据 XML 来自动建立界面?
. 可以直接在 界面设计器 中设计界面了..
. 按钮
.
. libraui
. 包含基本/简单的控件, 默认使用 graphics 画图做背景
. 自定义绘制
. IButtonState -- 实现几个状态的切换
. 需要自己实现 图片 绘制
. 功能太少, 缺少 LayoutManager, 离实用还需要增加很多自定义组件.
. 代码可能有BUG
. bit101
. 非常精简, 里面的绘图都是直接用 graphics 完成的.
. 不支持皮肤, 除非改造
. 仅用作学习, 不适合开发.
. lovefox
. 比较乱, 部分从 bit101 中扩展, 另外一些基于特定游戏
. 除了界面, 还包含 2D引擎/加载 等多种引擎
. fireice
. 评价
. 复杂度中等
. 支持皮肤
. 非开源, 代码不够美观
. 内容
. 有些是 局限于 傲剑本身的, 例如 FAlert
. 资源管理
. FBitmapDataBufferManager
. getBD 管理位图数据
. 通过 getDefinitionByName 得到类定义
. Tools
. 简单滤镜
. get9GridBitmpByName 获取9切片位图
. FSimpleButton
. set skin 中, 根据 XML 定义, 从资源加载位图
. 按钮
. FBaseSimpleButton
. 通过设置各状态图片的 visible 切换状态
. 皮肤
. upImage
. overImage
. downImageitp85KnLnlmo
. upImage
. FCheckBox
. 2个状态图片, 设置 visible 来切换
. FPanel
. 设置 skin
. 设置每一个子的 skin
. FVScorllBar
. set skin
. upButton, slipButton, bottomButton
. reSize
. 皮肤
. 配置信息, 通过 SkinInit.getSkinConfigByName 获取
. 背景 backgroundImage
. 包含: x, y, width, height, name=元件名
. set skin() 设置皮肤
. 皮肤的格式是固定的
. Tools
. 包含各种效果滤镜
. 布局
. LayoutManager
. 傲剑代码分析
. zcp
. common
. LNode
. _id, _data, _pre, _next -- 节点, 连接关系
. CacheUnit > LNode
. dispose() -- 删除 data 代表的位图资源, 如果是 doc, 递归删除子孩子
. Cache -- 按 最久未使用 淘汰的简单缓存
. CDFace -- 技能/道具 上面的 CD 雷达图
. CodeMixer -- 代码混合, 根据 Stage.a/b/c 来加密/解密 代码
. ZZip -- 把 ZIP 中的文件入读到数组中, [文件名-内容]
. 4月 demo
. 5月 demo
. 关键技术
. 绘图管理
. 脏矩形算法
. 条件: 当重绘区范围很小时
. 卡马克卷轴
. 条件: 当重绘区范围很小时
. 注意:
. 当重绘区很多时, 重新绘制全部是最快的
. 重回全部, 可兼容硬件加速的情况
. 独立出来, 对上层透明. 将来可比较不同算法的差异
. 地图层次维护
. u8 标志位掩码
. 人物显示
. 尝试渲染傲剑中的资源
. 内容
. SceneDemo 组织结构调整
. 资源异步加载机制 // wait, 先分析 地图背景/对象 的异步加载机制
. 分组管理
. 跟踪进度
. 开始/暂停/结束 下载
. 下载后的处理
. 加载 多个 资源列表
. loadAll( list, callback )
. 完成后, 调用某个函数
. 继续加载
. 取消加载
. 看一下 bulkloader ?
. 傲剑分析
. 地图背景
. 加载过程
. ThreadData -- 以队列方式, 依次加载每个背景图
. LoadData -- 加载数据, 管理重试次数
. 加载完成后, 保存到图片缓存, 并添加为自己的孩子
. 渲染过程
. 各 MapZone.showContainer 被添加为 Layer(自己) 的孩子, 因此直接显示背景
. 地图移动式, 超出视野的图片被删除(有误差范围)
. 地图对象
. 加载过程
.
. 渲染过程
. 脏矩形
. 建立和场景一样尺寸的 对象层 位图
. 效果对象
. 预加载机制
. 地图/人物 完成加载之前, 显示虚拟图片
. 绘图管理
. 方案:
. 带脏矩形
. 全屏绘制 -- 优先选择! 因为 AS 的计算效率低下, 重新绘制可能是更好的.
. 兼容设计
. 收集所有绘图元素, 然后一次性绘制
. 后期, 看效果, 选择 全屏绘制/脏矩形绘制
. 方便启用 硬件加速绘制
. 绘图元素
. 变更计数器
. 绘图内容, 标志
. 矩形范围
. 上一次矩形范围, 通过唯一ID, 由管理器维护
. 重绘原则
. 如果有变更, 则全部绘制
. 否则, 取所有重绘区, 与自己相交, 部分重绘 -- 这里尽量减少矩形的个数
. 接口
. updateRenderQueue
. 实现步骤
. 地图绘制
. 人物绘制
. 界面管理器
. FLEX 中的组件
. styleChanged
. createChildren -- 每当组件被添加到父容器中时, 由 flex 自动调用.
. commitProperties -- 修改组件属性时, 当 invalidateProperties/addChild 时由 flex自动调用
. measure -- 设置组件默认尺寸, 当 invalidateSize/addChild 时由 flex 自动调用
. layoutChrome -- 设置组件边框区域, 当 invalidateDisplayList . 此为更新边框区域
. updateDisplayList -- 由 样式改变 导致的外观修改, 非整个组件外观. 类似 PAINT 消息. 此为更新内容区域
. setActualSize -- 设置尺寸
. move -- 设置位置
. 绘制 皮肤/样式/边框, 或用 Graphics 绘制
. 布局管理 -- 插件形式
. HBOX/VBOX
. 设置百分比尺寸
. 固定尺寸: 无法被外部修改, 内部可随时调整
. 百分比: 可任意调整
. 默认尺寸
. 方式
. 已知父容器尺寸, 设置子控件尺寸
. 设置各子控件的百分比尺寸
. 重新排列布局
. 已知子控件尺寸, 设置父容器尺寸
. 计算子控件的最小尺寸
. 管理类
. 总管 -- UIManager
. 普通窗口/对话框 -- StateManager
. 菜单 -- MenuManager
. ToolTips -- TipsManager
. 拖放 -- DragDropManager
. 鼠标 -- MouseManager
. 其它 -- LayoutManager
. 资源组织
. res
. data
. avatar
. iconitp85KnLnlmo
. map
. maps
. mc
. sound
. uiRes
. 角色创建界面时的零散图片
. 待办内容
. 数据同步机制
. 资源加载机制
. 地图背景, 角色图片 的临时加载, 及加载动画
. 配置信息需要提前加载, 无法临时加载
. 地图绘制
. 角色换装机制
. 动画系统
. 需求
. 兼容不同外观格式(不同部位)
. 兼容 2D/3D
. 3D 实现方案
. 角色控制器
. 武器的收放
. 移动/跳高
. Entity/SubEntity
. Mesh 网格的实例
. 可附属其它对象: 武器/效果/
. Mesh/SubMesh
. 网格模型, 具体数据
. 动画(Animation), 单一动画(单动作)
. 包含 多方向 的动画帧序列
. 单一动作
. 声音(Sound)
. 独立声音
. 动画模板(Animation Template)
. 用于编辑器检索, 规则设定, 约束, 常量设定
. ID/类型/动作/部位
. 在不同状态/方向时, 各部位的绘制先后顺序/层次
. 8方向绘制次序
[0] = 1,2,3,4,5,6,7,8
[1] = 2,3,4,5,2,3,4,1
...
[7] = 1,2,3,4,5,6,7,3
. 人物A:
. 动作: 站立, 走, 跑, 跳跃, 攻击1, 攻击2, 受伤, 死亡
. 部位: 头, 上身, 下身, 武器, 披风
. 人物B:
. 动作: 站立, 走, 跑, 跳跃, 攻击1, 攻击2, 受伤, 死亡, 骑乘站立, 骑乘走, 骑乘跑, 骑乘攻击, 骑乘死亡
. 部位: 身体, 武器
. 效果:
. 动作: 开始, 循环, 结束
. 部位: 中心(默认), 溅射
. 动作外观(ActionFace), 动画集合, 单一动画(多动作), 复合动画, 基本动画, AnimSet
. 对应一个部位
. 角色不同的部位, 可任意搭配. 因此以部位为单位
. 动画模板ID
. 该模板下, 每个动作的的动画定义: 动画ID, 循环标志(Stop/Loop/Hide)
. 所属部位
. 功能
. 定义在不同 动作 下的动画资源
. 每一个项, 对应一个独立的动画ID
. 部位: 头, 上身, 下身, 武器, 影子
. 动作: 站立, 走, 跑, 跳跃, 攻击1, 攻击2, 受伤, 死亡
. 层次: Y值, priority, 和部位相关
. 部位外观
. 所属部位: 头, 上身, 下身, 武器, 影子
. 动作: 站立, 走, 跑, 跳跃, 攻击1, 攻击2, 受伤, 死亡
. 效果外观
. 开始/循环/结束
. 发射方式: 由技能定义
. 定义不同 动作 时, 动画定义:
. 动作ID, 动画ID
. 模板ID: 人物A
. 部位: 武器
. 动作定义
. 站立, ani001,
. 走, ani002
. 跑,
. 对象外观(ObjectFace), 外观定义, 角色动画, AnimMatrix
. ID
. 动画模板
. 每个部位的部位外观ID
. 对于角色, 这些外观ID可自定义, 以实现换装
. 例如:
头部 ani001
上身 ani002
下身 ani003
. avatar 对象框架
. 游戏对象(GameObject)
. 外观ID列表, 记录在这里
. 外观ID: 不同部位的外观ID列表
. 不同角色, 拥有不同的外观列表
. 主角, 拥有最详细的外观列表
. NPC, 拥有最少, 比如只有1个外观ID
. 外观ID 有默认值, 并且可自定义
. 玩家可换装
. 默认外观: 身体400
. 默认为裸体
. 其它外观, 由装备确定
. 每个部位, 只能有1个显示动画
. 当前值 = 装备值 || 默认值
. 其它信息
. 角色控制器
. 包含: 角色, NPC, 装饰, 爆炸, 发射物
. 例如:
ID NAME AnimationSetId
001 老江湖 003
. 角色(Avatar) > 游戏对象
. AI 状态
. 坐标/动作/方向
. 状态
. 独立/骑乘
. 和具体资源独立, 外观ID
. 换装/自定义部位??
. 重定义部位的定tipsLayer义
. 这些部位动画, 都必须有各自的 动作/状态 下的动画
. 由具体装备的道具决定
. 道具 -> 装备后的外观ID
. 搜索所有已穿戴的装备, 得到装备的外观ID列表, 每个部位同时只有1个
. 状态, 动作
. 关联
. 装备: 帽子/上衣/裤子/鞋/护腿/护腕/手套/披风/项链/戒指/盾牌/武器(主手/副手/射击) ID
. 关联
. 类似 ObjectState, 只记录状态, 不维护具体的动作?
. 例如 移动+攻击 是合法的, 对于不同的外观, 显示为不同的效果
. 效果(Effect) > 游戏对象
. 玩家(Player)
. 玩家可以控制某个角色
. 控制自己
. 控制NPC, 怪物
. 杂项
. 动画定义
. 资源
. 播放时间 ( 动画播放时间, 服务端CD)
. 部位ID
. 帽子/躯体/披风/武器 等
. 对象组合
. 坐骑/主人
. 中心点对齐+偏移
. 动作:
. 站立, 走, 跑, 跳跃, 攻击1, 攻击2, 受伤, 死亡
. 部位:
. 身体(头/上身/下身), 武器
. 特殊
. NPC, 只有5个动作(站立/跑/攻击/被攻击/死亡)
. NPC, 部位很少, 身体/武器 是一个整体, 一个图片资源
. 关联
. 坐骑
. 以主对象(人物)为主要控制, 次对象(坐骑)为次要
. 例如走路, 控制的是人, 而坐骑是依据人的当前状态(走路)来显示自己的状态
. 关系: 骑乘者, 被骑乘
. 内容:
. 骑乘者骑上坐骑后, 获得坐骑BUFF, 提高运动速度
. 移动时, 是移动骑乘者. 被骑乘对象的坐标, 跟随着移动者, 并且在解除骑乘关系时更新坐标
. 2选1的选择, 随便选哪个都一样.
. 如果骑乘者有其它BUFF, 如 马鞭道具, 可提高移动速度. 则使用 骑乘者 更合理.
. 多人骑乘
. 以 主骑乘者 为主, 坐骑/次骑乘者 为次
. 战斗/攻击
. 施法阶段, 可被打断
. 攻击阶段, 计算命中率, 立即扣血? -- 服务端是预先计算火球飞行时间, 然后设置定时器后扣血
. 状态
. 独立
. 骑乘
. 角色外观定义/外观编辑器
. 角色数据:
. 发射物
. 效果
. 功能的需求
. 骑乘/关联
. 坐骑可以坐多个人
. 以 主骑乘者 为主, 次骑乘者/被骑乘者 为次
. 骑乘后, 拥有骑乘技能?
. 例如: WOW 北极试炼中, 战马的破甲/冲刺
. 方案A: // cancel
. 技能属于角色
. 技能有要求: 骑乘状态
. 方案B:
. 技能属于坐骑
. 骑乘后, 把新技能添加到 特殊技能栏
. 要求:
. 特殊技能栏
. 骑乘时, 添加特殊技能
. 附属动画
. 效果对象, 附属在角色身上
. Q: 是否有独立的坐标?
. 例如 战士冲锋时, 留在身后的带状光芒
. 变身
. 角色可以变身/隐身, 控制NPC/怪物
. 相同游戏对象, 不同外观: 外观A -> 角色A; 外观B -> 角色A
. 角色 -> mat1, mat2, mat3 在多个外观中切换, 这种切换没有过渡动画, 是立即完成的. 各 mat 互相独立
. 角色变身后, 技能改变
. 保存角色的 1# 技能栏
. 改变角色外观
. 把 怪物技能 放到 1# 技能栏中
. 变身结合后, 恢复 1# 技能栏
. 要求:
. 单角色 多外观, 并可自由切换
. 切换时, 修改特殊技能
. 装备穿戴
. 搜索所有已穿戴的装备, 得到装备的外观ID列表, 每个部位同时只有1个
. 角色
. 外观ID列表
. 状态
. 中心点
. 角色中心点
. 关联对象对齐方式 中心点
. 方案:
. 每个动画, 都是基于 "虚拟中心点" 的
. 默认时
. 虚拟中心点 位于角色动画的中心位置 // 傲视群雄 中需要修改
. 把各部位/武器 直接对齐中心, 即可紧密连接
. SceneObject 存在必要性
. 不需要
. 数据完全保存在 数据库, 是否还有必要存在 SceneObject ??
. 需要
. 数据库中, 没有发射对象/静态对象
. 发射时间(开始/结束), 坐标(开始/结束), 目标对象ID, 发射方式
. 变身时的技能
. 新动作: 变形进入, 变形出去
. 粒子系统
. 武器/装备 上的FM特效
. 性能 依赖于 FP11 的 molehill
. molehill 最新动态如何, 是否兼容其它浏览器? // 最近没什么变化
. 暂缓: 以 目前FP10 为基础, 以后再添加特效. 否则, 连这个都无法实现了
. 角色系统
. 绘图层次结构
. 鼠标命中
. 技能
. 所有的动作, 都是技能, 包含普通攻击
. effect_id 表示了播放技能时, 效果的实现
. action_id 表示动作ID: attack, magic
. 其它数据
. 隐藏时间, 最大追踪距离
. 释放技能
. 数据: 技能ID, 主动方, 被动方/位置
. 播放对应的动作
. 建立对应的效果动画
. 1动作: 武器上的光芒, 1动作
. 2动作: 雷电术, 含施法/命中 2个动作
. 3动作: 火球术, 含施法/追踪/命中 3个动作
. 技能效果
. 发射物对象
. 开始坐标, 结束坐标, 速度
. 发射方式: 立即到达, 直线, 追踪/导弹 // 效果定义
. 动画: 默认有多个方向, 仅对火球术特殊处理, 需要旋转
. 模拟游戏世界
. AI 决策, 随机移动
. 和游戏数据的关联
. 游戏对象, 保存在内存中, 而不是屏幕上?
. 游戏对象, 只包含纯游戏数据, 不包含 动作/开始时间 等?
. 场景(渲染器)
. 地图信息
. 尺寸
. 名字
. 障碍, 寻径
. 遮挡
. 当前视区, 摄像机
. 对象列表
. 当前动作, 技能, 状态维护
. 层次结构
. 背景, 由地图完成?
. 对象
. 信息
. 渲染器
. 精灵工厂
. 可建立 装饰物/对象/效果
. 外观, 可随意被替换, 或修改部位设置
. 必要性
. 数据保存在 data, 渲染时由 SceneRender 实现. 还有必要存在 精灵对象 吗?
. 数据分析
. 对象
. 坐标
. 标志: 选中
. 动作, 开始时间
. 状态,
. 方向
. 移动, 移动同步时间
. A* 路径
. 效果
. 坐标, 开始时间, 播放时间
. 坐标2
. 装饰物
. 坐标, 装饰物ID
. 开发过程
. 显示对象
. 概述:
. 负责从 游戏数据 到渲染通道 的转换
. 可以建立临时数据, 保存到 游戏数据 上(游戏数据被释放时, 通知显示对象)
. 渲染过程: 便利所有的游戏数据, 为它建立临时数据, 得到渲染通道
. 纳入 render 包?
. 显示对象:游戏对象 = N:1 // GameObject
. 场景 ::= 显示对象管理器 // SceneObject
. 效果对象设计
. 火球飞行是对方向旋转 // ok
. 动作的同步问题
. 在每次角色播放动作(攻击/魔法)时, 同时添加效果动画 // 需要角色处理逻辑
. 效果动画自己负责销毁
. 方便的建立方式
. 利用 "池" 管理器, 只需提供入口参数, 就能建立动画
. 动画属性设置
. 利用 <matrix> 设置? <face>
. 角色对象
. Q: 如果 显示对象 只是渲染方法, 那场景中保存什么?
. 场景中保存显示对象? 对应于整理后的游戏数据, 如, 把 X/Y/尺寸 合并为 RECT ??
. 单个游戏数据, 可对应多个显示对象, 如发射群攻魔法
. Q: 显示对象 == 游戏对象 ??
. 处理和游戏对象的关联.
. 合并2者???
. 某些游戏对象, 不需要显示对象??
. 不需要立即建立显示对象
. 或者, 有没有显示对象不重要. 因为 游戏数据 已经包含完整信息!
. Q: 游戏对象, 应该有一种类继承的层次关系. 但游戏数据是独立的, 如何区分三者: 显示对象/游戏对象/游戏数据?
. Q: 更新过程 // ok
. 更新游戏数据?? 有必要??
. 逻辑处理, 都在服务端, ..客户端只是显示数据
. 更新 显示对象, 负责 游戏数据 的代理
. Q: 绘制过程 // ok
. 绘制 显示对象
. Q: 游戏数据 包含很多信息, 是否还需要 显示/场景对象 ?? // ok
. 游戏数据 不一定符合要求
. Q: 是否把 逻辑处理 独立出来??
. 建立效果动画
. 建立子对象
. 添加一个对象
. 删除一个对象
. 网络消息处理函数....
. 显示/场景对象
. 对 游戏数据 进行维护, 依赖 游戏数据 结构
. 命令控制
. 在场景内检索对象, 然后调用控制函数
. 更新周期
. 更新 游戏数据 中角色的坐标
. 绘制周期
. 根据坐标绘制动画
. 数据同步
. 新增对象, 首先建立场景对象, 然后请求对象详细数据
. 无法做成通用类库, 先实现再说!!!
. 角色更新
. 在网络游戏中, AI 决策由服务端完成, 因此, 不需要做 AI
. 一般更新
. 移动位置
. 更新状态
. 显示驱动?
. 不可见的对象, 不需要更新
. 玩家输入
. 本地验证
. 发送到服务器
. 服务端消息
. 移动
. 更新到角色数据上 -- 非显示对象, 而是纯数据?
. 技能(预备/发射)
. 预备时间 读条
. 发射火球术
. 持续治疗
. 与地图系统的结合
. 界面调整
. xml 中支持 refname
. 建立另一个控件的实例
. 如果发现有 refname 关键字, 则先建立它的实例(提供新的 style)
. Q: 用 Panel 还是其它名字? // 任意 Container 都可以
. Q: style 是否封装一下? // NO
. Q: class 类似继承? // YES
. Q: id/name 混淆
<style name="skin001">
<style>
<Panel name="p002" >
<instance id="001" class="p001" style="002"/>
<instance id="002" class="p001" style="002"/>
</Panel>